{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# AutoML with Text data - Mixed Data Types"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Dealing with Mixed Data Types\n",
    "\n",
    "In your applications, your text data may be mixed with other common data types like *numerical* data and *categorical* data (which are commonly found in tabular data). The `TextPrediction` task in AutoGluon can train a single neural network that jointly operates on multiple feature types, including text, categorical, and numerical columns. Here we'll again use the [Semantic Textual Similarity](http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark) dataset to illustrate this functionality."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "np.random.seed(123)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Load Data\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loaded data from: https://autogluon-text.s3-accelerate.amazonaws.com/glue/sts/train.parquet | Columns = 4 / 4 | Rows = 5749 -> 5749\n",
      "Loaded data from: https://autogluon-text.s3-accelerate.amazonaws.com/glue/sts/dev.parquet | Columns = 4 / 4 | Rows = 1500 -> 1500\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sentence1</th>\n",
       "      <th>sentence2</th>\n",
       "      <th>genre</th>\n",
       "      <th>score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A plane is taking off.</td>\n",
       "      <td>An air plane is taking off.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>5.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A man is playing a large flute.</td>\n",
       "      <td>A man is playing a flute.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>3.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>A man is spreading shreded cheese on a pizza.</td>\n",
       "      <td>A man is spreading shredded cheese on an uncoo...</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>3.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Three men are playing chess.</td>\n",
       "      <td>Two men are playing chess.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>2.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A man is playing the cello.</td>\n",
       "      <td>A man seated is playing the cello.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>4.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Some men are fighting.</td>\n",
       "      <td>Two men are fighting.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>4.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>A man is smoking.</td>\n",
       "      <td>A man is skating.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>0.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>The man is playing the piano.</td>\n",
       "      <td>The man is playing the guitar.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>1.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>A man is playing on a guitar and singing.</td>\n",
       "      <td>A woman is playing an acoustic guitar and sing...</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>2.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>A person is throwing a cat on to the ceiling.</td>\n",
       "      <td>A person throws a cat on the ceiling.</td>\n",
       "      <td>main-captions</td>\n",
       "      <td>5.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       sentence1  \\\n",
       "0                         A plane is taking off.   \n",
       "1                A man is playing a large flute.   \n",
       "2  A man is spreading shreded cheese on a pizza.   \n",
       "3                   Three men are playing chess.   \n",
       "4                    A man is playing the cello.   \n",
       "5                         Some men are fighting.   \n",
       "6                              A man is smoking.   \n",
       "7                  The man is playing the piano.   \n",
       "8      A man is playing on a guitar and singing.   \n",
       "9  A person is throwing a cat on to the ceiling.   \n",
       "\n",
       "                                           sentence2          genre  score  \n",
       "0                        An air plane is taking off.  main-captions   5.00  \n",
       "1                          A man is playing a flute.  main-captions   3.80  \n",
       "2  A man is spreading shredded cheese on an uncoo...  main-captions   3.80  \n",
       "3                         Two men are playing chess.  main-captions   2.60  \n",
       "4                 A man seated is playing the cello.  main-captions   4.25  \n",
       "5                              Two men are fighting.  main-captions   4.25  \n",
       "6                                  A man is skating.  main-captions   0.50  \n",
       "7                     The man is playing the guitar.  main-captions   1.60  \n",
       "8  A woman is playing an acoustic guitar and sing...  main-captions   2.20  \n",
       "9              A person throws a cat on the ceiling.  main-captions   5.00  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from autogluon.utils.tabular.utils.loaders import load_pd\n",
    "\n",
    "train_data = load_pd.load('https://autogluon-text.s3-accelerate.amazonaws.com/glue/sts/train.parquet')\n",
    "dev_data = load_pd.load('https://autogluon-text.s3-accelerate.amazonaws.com/glue/sts/dev.parquet')\n",
    "train_data.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Note the STS dataset contains two text fields: `sentence1` and `sentence2`, one categorical field: `genre`, and one numerical field `score`. Let's try to predict the **score** based on the other features: `sentence1`, `sentence2`, `genre`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2020-08-05 11:42:31,723 - root - INFO - All Logs will be saved to ./ag_sts_mixed_score/ag_text_prediction.log\n",
      "2020-08-05 11:42:31,744 - root - INFO - Train Dataset:\n",
      "2020-08-05 11:42:31,744 - root - INFO - Columns:\n",
      "\n",
      "- Text(\n",
      "   name=\"sentence1\"\n",
      "   #total/missing=4886/0\n",
      "   length, min/avg/max=16/57.92/367\n",
      ")\n",
      "- Text(\n",
      "   name=\"sentence2\"\n",
      "   #total/missing=4886/0\n",
      "   length, min/avg/max=15/57.68/265\n",
      ")\n",
      "- Categorical(\n",
      "   name=\"genre\"\n",
      "   #total/missing=4886/0\n",
      "   num_class (total/non_special)=4/3\n",
      "   categories=['main-captions', 'main-forums', 'main-news']\n",
      "   freq=[1724, 379, 2783]\n",
      ")\n",
      "- Numerical(\n",
      "   name=\"score\"\n",
      "   #total/missing=4886/0\n",
      "   shape=()\n",
      ")\n",
      "\n",
      "\n",
      "2020-08-05 11:42:31,745 - root - INFO - Tuning Dataset:\n",
      "2020-08-05 11:42:31,745 - root - INFO - Columns:\n",
      "\n",
      "- Text(\n",
      "   name=\"sentence1\"\n",
      "   #total/missing=863/0\n",
      "   length, min/avg/max=17/56.48/315\n",
      ")\n",
      "- Text(\n",
      "   name=\"sentence2\"\n",
      "   #total/missing=863/0\n",
      "   length, min/avg/max=16/56.69/311\n",
      ")\n",
      "- Categorical(\n",
      "   name=\"genre\"\n",
      "   #total/missing=863/0\n",
      "   num_class (total/non_special)=4/3\n",
      "   categories=['main-captions', 'main-forums', 'main-news']\n",
      "   freq=[276, 71, 516]\n",
      ")\n",
      "- Numerical(\n",
      "   name=\"score\"\n",
      "   #total/missing=863/0\n",
      "   shape=()\n",
      ")\n",
      "\n",
      "\n",
      "2020-08-05 11:42:31,746 - root - INFO - Label columns=['score'], Problem types=['regression'], Label shapes=[()]\n",
      "2020-08-05 11:42:31,746 - root - INFO - Eval Metric=mse, Stop Metric=mse, Log Metrics=['mse', 'rmse', 'mae']\n",
      "2020-08-05 11:42:31,747 - root - INFO - NumPy-shape semantics has been activated in your code. This is required for creating and manipulating scalar and zero-size tensors, which were not supported in MXNet before, as in the official NumPy library. Please DO NOT manually deactivate this semantics while using `mxnet.numpy` and `mxnet.numpy_extension` modules.\n",
      "2020-08-05 11:42:31,752 - root - INFO - NumPy array semantics has been activated in your code. This allows you to use operators from MXNet NumPy and NumPy Extension modules as well as MXNet NumPy `ndarray`s.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d99570d49d8b479298d2905ef31380d4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=4.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 60%|█████▉    | 367/612 [01:01<00:41,  5.93it/s]\n",
      " 60%|█████▉    | 367/612 [01:02<00:41,  5.90it/s]\n",
      " 60%|█████▉    | 367/612 [01:02<00:41,  5.89it/s]\n",
      " 63%|██████▎   | 383/612 [01:04<00:38,  5.98it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEXCAYAAACzhgONAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABQbklEQVR4nO3dd3gc1dnw4d+zq1313qxiW+69YIxpBkwxYJopgUAglBAIBL6QNwmEBBICKS95UyEJIUASIAkQCKFXG2PANDdcJTfJkq1i9S6ttp3vjxnJsi3J6pKt576uvXZ3ypmzs7P7zJxz5hwxxqCUUkp1xjHUGVBKKTW8aaBQSinVJQ0USimluqSBQimlVJc0UCillOqSBgqllFJd0kAxTIhIqoh8KCL1IvKboc7PSCMiV4vIu/29bH8RkR+KyBODsJ0xItIgIs6B3lZ3iUi+iJw11PnoDz08zn4iIv8c6Dx1hwaKPrAP4Gb7h1UqIk+KSFQvk7sZqABijDHf7cdsHrVE5FF73zeIiFdEfO3ev9WTtIwx/zLGnN3fy3bX4T6LMeYXxpiv9+c2O2KM2WOMiTLGBAZ6WwNBRK4XkVUdTG8LNvYyAXvf1onIBhG5oN2ycSLyZxHZJyJNIrJZRG7oZHtj2n1PDSJiRKSx3ftT2i8/EMfOYNBA0XcXGmOigHnAfODenqwsFgcwFsg2vbgDUkRCerrO0cAYc4v9pxYF/AL4d+t7Y8yS1uWOhP3T3c+i+s2n9r6OA/4KPC8i8SLiBpZj/R5PBGKBO4EHReQ7ByfSLrC2fncAc9pN+6h12SPhOOyMBop+YowpAt4CZgKIyAki8omI1IjIRhFZ1LqsiKwUkZ+LyMdAE/A0cB1wl30WcpaIhIrI70Wk2H78XkRC7fUXiUihiHxfRPYBf7cvU18QkX/axVebRWSyiPxARMpEZK+InN0uDzeISI69bJ6IfKPdvNb0v2uvW9L+jEpEwkXkNyJSICK1IrJKRMIP97nbs/P+n4OmPSQiD9uvr7fzVS8iu0Xk6p58H/YZ5PdFZBPQKCIhInK3iOTaaWaLyCXtlj/gTNQ+M7xFRHban+VPIiK9WNZp76sK+3Pcbi/foz8NaVcMISJZdho32N9rtb3940Rkk52HPx60/tfs77taRN4RkbGdbCerff7sY/WnIvKxvd/eFZGkLvJ5gVhn6DX2cTC73bxO9789/6Z2x2S2iMxrN3uu/dlqReTfIhLWk/3XGWNMEPgbEA5MAL4KjAEuN8bsNsb4jDFvA98CHhCRmO6mbR8nH4vI70SkEvhJB8fOQ/Z3WCci6+SgK5Bhwxijj14+gHzgLPv1aGAr8FMgA6gEzsMKxovt98n2siuBPcAMIARwAU8CP2uX9gPAZ0AKkAx8AvzUnrcI8AO/BEKxDvKfAB7gHDvNp4HdwD12+jcBu9ulfz7WD0OA07AC1ryD0n/AXvc8e368Pf9P9mfIAJzASXY+uvzcB+27sXaa0fZ7J1ACnABEAnXAFHteGjDjMN/FT4B/HvTdbLC/l3B72uVAup23LwONQJo973pgVbv1DfA61hnnGKAcOLcXy94CZAOZQDzW2aoBQrr7WQ6eBmTZaTwKhAFn29/9y1jHSwZQBpxmL78U2AVMs4+Ne4FPOtl2a9oh7Y7VXGAy1nG2Eniwk3WPsbd7vP19Xmd/D6Hd2P+XA0XAcVjH5ERgbLvvcrW9bgKQA9zSSR4O+G46+a22LWPvjzuAeqyrh+eApzpYPwTrN3HOYY5DA0xstx0/8P/s9cM7OHauARLt+d8F9gFhnR0HQ/XQK4q+e1lEaoBVwAdYxQbXAG8aY940xgSNMcuAtVh/oK2eNMZsNcb4jTG+DtK9GnjAGFNmjCkH7sc622kVBO4zxrQYY5rtaR8ZY94xxviBF7ACzIN2+s8BWSISB2CMecMYk2ssHwDvAu3PZnz29n3GmDeBBmCKWMVkXwPuMMYUGWMCxphPjDEt3fzc2NsvANYDrWeVZwBNxpjP2n2+mSISbowpMcZs7Xj3d+lhY8ze1v1jjHnBGFNs5+3fwE5gQRfrP2iMqTHG7AHeB+b2YtkrgIeMMYXGmGrgwV58js781BjjMca8i/Wn+6x9vBQBH2H9cYMVrP7XGJNjHxu/wDpD7/CqogN/N8bssPfj83S+H24G/mKM+dw+Lp4CWrCC/+H2/9eB/zPGrLGPyV32MdLqYXvdKuC1LvIAcIJ9RdP2wArghyyD9cd8FXCJMaYWSMI6YTmAvd8q7Pk9UWyM+YP9O28+eKYx5p/GmEp7/m+wTrim9HAbA04DRd9dbIyJM8aMNcZ80z4YxgKXH3SgLsQ6M2619zDppgPtfygF9rRW5cYYz0HrlLZ73QxUmP2Vkq0HaRSAiCwRkc9EpMrO33kc+COotH8crZrsdZOwzmJzO8hzdz53e89g/UgBvmK/xxjTiHXGeQtQIiJviMjUTtLoygH7WESubVcsUoNVTNjVD39fu9etn7+ny6YflI+21yJyiuyv9OxNIDz4+z74fWsexgIPtfvcVVhn7Rnd3E5398NY4LsHff+jsY/bw+z/0XR8TPU0DwCf2b/JtgfWFXxHyyQZY04wxiy3p1fQwfFqF8Ul2fN7osvfuYh8zy5uq7X3SSw9D0YDTgPFwNgL/OOggzXSGNP+bPJwldbFWD+8VmPsad1dv1Ni1XW8CPwaSLV/SG9i/XkcTgVWMceEDuZ153O39wKwSEQysa4snmmdYV8ZLcb60W4DHu/epztA2z6yz54fB24HEu3PvIXufea+KMEqdmo1ui1zxnxk9ld6zhjAPOwFvnHQ9xJujPlkALbz84O2E2GMebYb+38vHR9Tg205sEREIg+afhnW1dFnh67SpU5/p3Z9xF1YV53x9j6pZeCPyR7TQDEw/glcKCLn2JWZYWJVEGceds39ngXuFZFku/Lwx3a6/cGNdYlbDvhFZAlWOfdhmf2Vf78VkXT7851oB58efW67SG0l8Hes+pMcaLunZKn9Y23BKvYK9ukTW/UeBuszI1bl/Mw+ptkdzwN3iEiGXez3/UHY5sEeBX4gIjMARCRWRC4fgO08DtwiIseLJVJEzheRaA6//58Avicix9rrTuxB0Vh/+gdQCLwgVsW+S0TOAR4GfmIXT/WXaKw6jHIgRER+DHS7snwwaaAYAMaYvVgViD/EOgj2YjWx68n+/hlW+f4mYDNWef7P+il/9VitOJ4HqrGKfV7tQRLfs/O0BqsY45eAo5ef+xngLNpdTdjLfwfrCqoKq7L91h7k7xDGmGzgN8CnWEU0s4CP+5JmNz2OVf+zCfgC68rNDwzafQrGmJewvqPnRKQO60y+35vcGmPWYjWa+CPWcbULq/L2sPvfGPMC8HOs46Aeq2I+ob/zeDh2XdtZWMfu51iNKn4L3GOM+VU/b+4d4G1gB1bRsofDF0kPCTFGBy5SarDYV2+PGmOG4mxZqV7RKwqlBpBY95ycJ9Z9HBnAfcBLQ50vpXpCryiUGkAiEoHVbHoqVkukN7CaFtcNacaU6gENFEoppbqkRU9KKaW6dMR2UtWVpKQkk5WVNdTZUEqpI8a6desqjDHJHc07KgNFVlYWa9euHepsKKXUEUNECjqbNyRFTyKSICLLxOptc5mIxHeyXMC+5X+DiPSknb9SSql+MlR1FHcD7xljJgHv2e870myMmWs/Lhq87CmllGo1VIFiKfCU/fop4OIhyodSSqnDGKpAkWqMae3Kdx+Q2slyYSKy1u7l9OKuEhSRm+1l15aXl/dnXpVSakQbsMpsEVkOjOpg1j3t3xhjjIh0djPHWGNMkYiMB1aIyGZjTIddERtjHgMeA5g/f77eHKKUUv1kwAKFMeaszuaJSKmIpBljSkQkDWtUrI7SKLKf80RkJdZALF31Wa+UUqqfDVXR06tYwyRiP79y8AJiDXTeOkZ0EnAy1pCSSimlBtFQ3UfxIPC8iNyI1b3uFQAiMh9rLNyvY43v+xcRCWIFtAftroqVUiOYCQRo/PQzAtVVuNLScKWnE5KSgoQclbeFDQtDsmeNMZXAmR1MX4s1di726FuzBjlrSqkOBE2QJl8Tjb5GmvxNba9b3zf6GgEYHzueSfGTiA2N7fc8tOTmUvvyy9S+8ir+soNKq51OXKmpVtBIt4KH9ciwn9NwhIX1e576W35tPm+vf476N97m279chsvpGuosAUfpndlKqe4xxlDWVEZubS65NbnkVu+iqnAX/oZ6vJ4mfC3N+FuaCXpbCAmAKwAhfvs50O7ZD74QeD5dyB0FiTGjmBQ/yXrETWJy/GTGx47v8R9foLaWurfeouall/Bs3AROJ1GnnkrsvfcQOmECvuISfMXF1qPEem5auxZ/aRkEDhwbypmYiDMtjZAZM4k78wyiTzgeh9vdn7uzVxq8DbyT/w4v73yJqJVfcMOyIKE+Ycvlazjm+JOGOnvAUdp77Pz584124aGGE+P14isrwxkXhzMqavC3bwylTaXk1eSxq2YXebX2c00e9b56EmsNC7MNi7KFjLK+Db4XdDkpz4ojZ7TweXIt2elBmsOEEAkhKzaLSfFW4JgUZwWSUZGj8AV9tARa8Aa8eL0emj/7HN9rbxP88HPE6yMwLoPmc06kftExeGLC8Aa9uBwu4kPjiQuLIz40nviweMJCrKsG4/fjLy21A4gVTHZvzWX3ph1MqthNWMBHc0goW9Knsi1rDrsnzsHER+Jy1+Fw1yEhNQQcNXipxmOq8ARrmJE8gQVpxzIvdR4T4ybikN5X8QZNkNX7VvPKrldYXrCc8Jpm7ngvjOk5jeQkZJB7/Z18+8bFuJz2NoJB8NRAczU0VUFz1YGvW58dLrisN8PLg4isM8bM73CeBgo10pQ3lbOlYgubKzZT2lRKVkwWE+ImMDFuIhlRGTgdzh6nGfR4rD+louL9Z7hFRW2v/aWlYAwSEUHcly4j4drrcGdmDMCng9pmH+v3lvB63ut4ZA81/r3k1ebR4GtoWyYhLIHp7rGcvMPBlNX7iNpqdfMTfswxxJx7Ds7EJMTtQtxuxOXC4XZbr+330sH7YGMjzevX07RuPU3r1uHJzga/H0RoGZdG6cQEcjJhVVIV252HNnRMrzSctjnIaZsNCQ1QHwarZggrZznYPQoQOexnDw8JJy40jviw+LYgEuOOY0uBnzV5XjJjE5mf5iI6ezOjs3OZsn0f8fU+gsCudFg3ycG6icKeZGt7QX8kxh+L8UfiCi/DOK0hs6Pd0cxNnsu81HnMS5nHjKQZhDpDD5u/vVU7eWXHi7xa8A4lngqiHaHcsiuFY18txHgDFM5MZeKiVCbGBA4MAM01WEOOd0AcEBYHEQkQmwnXHtI2qFs0UKgRq8HbwNbKrWyp2HJAcEiqNVyz0nDc9iABB3hDoMUFPpcgoaE4wyNwR0QRHhlLVFQC4VHxOMJCcYSGIWFhGJ/vgGAQqKw8cMNOJ65Ro/aXlWdkEJI2iua1a6l9400whphzziHha18jfOaMXn22YNCwt7qJnJI6sovryC6pJ3vfPiqc7+FO+BhxNhP0R+Hwp5IeMY5jRk3hrDHTmJ5bRfCt92lYuRLj8+HOyiJ26UXEXHAB7tGj+2Gv2/lraqJ50yaa1q6jad1amjdsxDQ3W7snMwPvjPGUTIynsaWetA+2EbOzBOMQGo6dTOPiBfhOmIs7PAK3043b4SbUGYrb6cbldOEWF76Al2pPJdWeamo8VVR7qq3XLTVUt9RQ01JDeXM1Zc01BKXlkPwlhCWQGp7CzOpIZmxrZvSmMqJz9wEgo1KIWrSIiNPOwD/rGLZXt/D9FzdR1lzCefObiU8oYkP5F+TV5gHgcriYlTSLY1KOYV7qPOYmzCBm+9uw8VmaGst4J1jPK+4g68LciDGc1Ozh0n1NTP4wlOaSMMKTW0hfUIMjIYKQyPj9f/zhCfufw+MPmhZvPcLiwNH3BqwaKNQRoaCugLs+vAuP30N8WDwJYQltRQpt7+0zxYSwBOLC4nA59pd5ewNedlTvYHPF5rbAsLt2N8Y+ExsTPYY5UVM488Na0l5dg0McxF56CQF3CDW1pdTXV9LYUI2nsRZfUwO0eHH7we2HML8QHnDi9hlCfEFwOpG0FEIzMgnLGIM7M6NdBWrXrXB8+/ZR9Y9/UPPv5wk2NBCxYAGJN36NyFNOQTr5wTd7A2wvrW8LCjkldWzbV09Dix8AR0gjKRmf44n4iADNzIo/ia/NuAlPYzorc0opWfU5x+74jIXFm4j2NdMSHYvzrHMYf9WXiJg1E+nG2fphGdPlWb/x+fBs27Y/cKxbT6C6GgD3xAnEXXIpMRdegCslBVoaoK4Iagvt5yKoK7Sf7fd2BXp3eIEap5Nqh4OIyBRSj7kW9/yvQ2TSAcv5y8tp+OAD6t9fSeMnn2Cam5GICCJPOpGQUxbx24ZkXtjZwIJxCfz+y3MJD/PwRdkXfFH2BevL1pNdsRW/CSDGMNHnY7SE8akLmgmS5YxkacwUzk+cS9jqUsqefgd/MMiLU09l7bwz+e11pzNxVP83AuguDRRq2KtoruCaN6+h0dfI/NT5VHmqqG6xzhBrW2rb/uwPFuOOISEsAbfTze7a3fiCPgASwxKZlTSLmUkzmZk0k+nx05C3P6D8d7/DX15OzAUXkPKd/8GVnt5pnmpbasmtyWVXzS521exqe13VbF892H+KESERjIocxajIUaRFppEamcqoiFFt00ZFjiI8JJz1e6rZVlKPxxeg2RcgUFfHqI/fZfwHrxNZW0lVcgZrjlvChinH0xB04PEH8PiCNHsDlNQ2E7R3QVRoCNPSopmWFsOY5AC7ml5ixb7X8QS8LI6bys1RU5nc3ExLXj51W6qo3VSJv6YFXA78k1IoHJ1MTmQ0HnHhdIeTlRrPpPREJmckERURCY4Q60+4pQFa6sFrP7d/HDzN2wABL4SEgSscXJHgjgBXBLgj7WmtryPAHYEJicBb2YLx+QiNbkLqivcHB0/NQd+GQFQqxGZYxSsxmRAWa51JS+vDCeIggPDetnI+yq0mNTaCKxeMJSk6zJof9EH2K5C3EpxumHkZLLgZMuYd8v0HW1po+vxzGlaupP79lfhLSsDhoHHKTJ4PHc+6zFl859rTOX92mlVEtPoxmj9/lC2mifWpk/giIY08Xx0npZ/ExRMvZk7yHHxFxZT86F6aPv2M8kmzuDPrAsbPmsyfr5lHXMTQVqxroFDDWqOvkRvevoH8unz+evZfmZV8YKvoQDBgFSd4qqluqbaCiF3M0BpQmnxNTIyfyKykWcxKmkVqRGrbWXLTmjWU/u+DeLKzCZszm1E/+AHh0yfBrvegZCOEx0FEEkQk2o8E60zTHdXhGXKVp4o9dXvY17jPejTt2/+6cR+VnspD1nGaSLwtMQRbUgg0jybQPJagJ41wVyiRTsOphRtYkr2CzKpC6iNiWTPvLLbMPwtHVDRZwXymusqZEF5PhqOGGH85ZfV7+bu3hJccPpKq4IKiFs4o9hJZ7cBbF0JLfQgEBQQiM4XY8X6iMz04xAt+D52Wd3fGFQGh0dbDHbX/dftpIaHga7YfTeBttJ+brOe2143Ws795f/rhCVYQiMk8MBjEZkBMBkSnQcjh/0iLa5q5/Zn1rN9TwzUnjOHe86cT5uqgzql8O6x+HDY+awW5jPlw/Ddg+sUdbscYgyc7m4b33qN++Xu07NgBwJ6YFBKnhDIjJZuwqHpkyhJY+D8w5vgD1w8GqX72Wcp+81sQYfmpV/Br93SuOn4MDyydub/SeghpoFDDli/g4/YVt/N5yec8fMbDnJp5ar+l7S0spOxXv6b+nXcIGTWKlG/dQsy4ILL9dStItP+j6ojT3S54HPSIGw2ZCyBp0iHBxBvwUly/j1e2ZvPixi3sa9xHVGQDo5NbqDd7KW8uBcDtcDM9cTqzk2czJ3kOs5JmEbNpN5WP/4XGT1cjbidxk3wkjCsnJDyAty6EfY0RrPdFU18NGZWGtGpwBO0Ni+BKTyV04iRCJ0/BPWECUQsXEpJ0YPEKxkDQbwUMv5egz8P2ogrW5JawIa+U3WU1NJgwAq5IJo9J55gJGZwwMZWZGbE4Hf1QRNUqGLS+A3FYVxx9tGJbKd95fiP+gOF/L53FhXM6v1ps46mDDc/A6segKhciU2D+DXDsDRCT1ulq3o0fUvf0r2hYnU1zuQsQSE4kfsl5RJ95FhHHzmsrevQWFFByz700rV1LyPEncN+kpXzW6OLe86dzw8lZ/VPs1w80UKhhyRjDPavu4bW813jgpAe4ZNIl/ZJuoKGByr/8haonnwKnk8Tz55M4oRxH4UfWH2R0Gky9AKZdCGNPss50myqt4oOmSmissN9XHji9yZ7eXL1/Y+HxVsAYczyMPh5Pyhxe3FzFYx/mUVDZxITkSG5dNJGlc9PbzhpLG0vZVLGJjWUb2VSxia0VW/EGvQCkGgezmxo4ocjH9E1hOHNDrJN/gdayp4BAY2o0CdPmEDtlBqETJhI6cQLuceP65aay6kYvn++u5NPcSj7JrWRnmdVaKjoshOPHJXDihCROHJ/I1FHROPozcPSSLxDk1+9u5y8f5DEtLYZHrp7HuKTIniUSDELeCvj8Mdj5LjicMO0i6ypj9PH7TwaK1sOq30HOa9YV1DFfZX30RTz75IfMzPuC+RU7cfh9OGNjiTr9dFzpaVT+7e+Iy0XLzd/ixtJUmn1B/vCVYzh9Skr/74w+0EChhqXfrfsdf9vyN26fezvfmPONPqdnAgFq/vtfyn/7WwLVNcTOiCR5Qh6uiADEj4PpF1k//vR5fWslEvBDVR4UroY9n8He1VCxHQA/TrYGx7InYiaj55zO7BPPxhGXeWgazdWQuwJ2Lse3aznbfTVsDHOzMW4Um9wuigJWRW1Kg5NLc2Ko9lRRnOxk2vyz+dIZ/4+0+DG9z38PldV7+Cyvik9zK/g0t5L8yiYA4iNcnDA+kZMmJHLihEQmJEdhDNS3+Klr9lHn8VHX7LeffdR5/NQfMs2H0yFkJUYyPjmK8UmRjE+OJCMunJBuFMcU1zTzrWe/YG1BNV85fgw/vqCToqaeqMqDNX+F9f+AlloYNRvmXGkFkLyVEBoLC26C42+BKGuI6ZomLz/472be31DAV6SYq335+D/5iGBdHVGLFrHpy7fwnfeKSYkJ5a/XHcfk1Oi+5XEAaKBQA84YQ3WTj5LaZvbVeiivb2HhpCQy4yM6XP5fOf/iwdUPcsXkK7j3hHv7dPltAgGa3n2R0t88REthFeFJLaQeU0f49CnWVcO0CyFlerfa4fdUVaOXv3+8m5c+2cJEbw4XJxZyekQeMVWbEZ/1h0pMJoxeYJ2ZttTDrmVQuAZM0LoimXAGTFwME8+EKOsss6K5gk3lm9hYvpGtlVuZGj+V62ZcR3JEcr9/hp4qrmluu9r4NLeC4loPAGEuBy3+IIf7S4kKDSEmLISYcBcxYS5aAkF2lzdQ5/G3LeNyCmMTIxlnBw4rgEQxLimSxEg3IsL728v4zr834PUH+cWls1g6t5/vS/E2wqZ/W1cZ5TlWZfqJt1nFUmExhyxujOH5tXv5yavZhLoc/HLpdE6LDfDIDg8Pr9jFgqwEHv3qsSREDv3d4B3RQKF6pbU5IyEhNGaOY19dCyW1HvbVNlNS67EfVmAoqfXQ4g8esH5CpJunbljArMwDm/y9k/8Od35wJ6ePPp3fLvptj25wM8bgKyrCs/ZTPJ8uo3nLFjx7qwl6wRXhJ+WMZKIvvgKZdiEkTuiX/dCR4ppmHvswj+fW7MHjC3LOjFS+uWgic0bHWQsEfFC6xbra2Ps57Pncat6JQPoxMPEsmLQYMo61ijmOUMYY9lQ18UluJbvKGogKDSG6XRCICQ8hJsxFbLiL6LAQokJDOrxSMMZQ1ehld0UjeeWN5FU0klfewO6KRgoqm/AG9h9bMWEhjE6IYGtxHVNHRfOnq+cxIXkA73Y3Bip2QNxYcB2+aC+3vIE7nvuCLUV1TEmNZntpPZcfm8nPLplJaMjw/a41UKhuCTY307xxY4c3SFWFRrM+ZTLrUqbwRcpkGsOjSY0JIz0ujFGx4aTFhjGq3XuA2/61npomL49fO5+TJloVqmv2reEby77BzKSZPLb4sbYuFzpijMG/b58VDDZtxLPuEzzbcgk0WeX5OAxh8UHCxqUSfsx8Yr76LRwp4/ptfxhjKG9oYW9VEwWVTeypsh+VTWzYWwPA0rkZ3LpoPBNTulGUUFdsVZAf1HZfdS0QNBRVN5Nb0cDu8kbyKqwAMnVUDHeeM6XvRU0DwOsP8pt3t/P3j/P53jmTuemU8cOm0rozGihUhwK1tTStX0/zunU0rVlLc3Y2+HwgQujUqVSMm8rD5VGckB7BnJJtxGd/gbOhDkQImzGDyIUnE3XKKYTPmdPhzWX7aj1c+7fPya9o4uGr5jI+o57r37qe5Ihknl7y9AE9jAabm/EVFuLdswfP1mwrOGzeSKDa6jIBMYTG+glP9BM2MZOwY08mdOHFOMYeB87e923p8QUorN4fAPZUNbOnqrEtKHh8+89kRWBUTBijEyKYnRHL9SdndVq0phRYFe3Doelrd2igUAD4SstoXrfWvmJYZ7UFNwZcLsJnzSLi2GOJmH8s4cccgyc0gsW//YBFIZv56SnhOCecjokfb7UlX7WKxo9W0bxxIwSDOKKiiDzxBCIXnkLUwpNxZewvK65p8nLjU2vZUJTHpNF/IbMefjTmJiLK6/Ht2Yu3sBDfnj34249zLhAaFyQszkNYgpfw8RmEHncGjqlnWa2UQvtWzFDR0MJbm0t4bWMJawqqDihTj3A7GZMQweiECMa0PhKt54y48GF59qpUf9BAMYIFPR5q33yT/Cf/TNiOQgC8bgfF42PYMy6S3ePCKch00+wI4Av62h51Hg+BQDMO8ZPh87O4qYnFRDF1zCJk4hkwfhGBgJvGTz+jcdVHNKz62LpzFXCPG0fkwoWI04m3cC/N+fk0FuQR5jvwWAtJTcadEIkr0ovbUYrLWYE7yk9oegKOKYtg/OkwflGX7dm7q7bJxztb9/HapmI+3lVB0MCklCjOmTGKiSlRjE6IYGxiRFtFqVIjjQaKEci7Zw/Vz/2b6hf/g6mtY28SrD82jpIpiVRkRhPicuNyuAhxhuByuA54NLXA5s1bWez4gpCYdHKSxrGmcjMBDKP9ARY3NHB2YzPTE6YgE86ECadjMo/Hu6fIutpY9TFNa9YAEJKZQXZYFbsi6gmNP5Wa+gBnT2hgXkwuzqocK7OhsZC1EMadaj1SpvVLC6XGFj/Lc0p5bWMxH+woxxcwjE2M4MLZ6Vw4J50po4ZfE0WlhooGihHCBAI0fPgh1c8+S+NHqzAifDHNzRtzA5x18R1cN+P6w7YwMsZw/x/+wg+q7sU5agYh178GYTFUe6pZsWcFywre5fOSz/GbABnGyeK6WhY3NjAr4ETGnmg19Rx/OiZhMoGAhzvf+ybLKzfyK3805xTmICZIs3GzJ2o2E48/D+eERTBqTp/qGdrz+AKs3F7Oa5uKeS+nFI8vSFpsGBfMTuPCOenMyojVKwalOqCB4ijnr6qi5sUXqXnu3/iKinAmJ7PtlDH8Jn0jMRlZPHjqg8xI7F5X1iuWv8mCj24gEJ1B7K3LIDLxkGVqW2rtoLGMT0s+xR/0M8oRxmKPj7Mripjd4kUikvhFhOG56EjuqqrlqzHTYNypmHGn8siuBH71Xj5nTE3hT1+ZR7i7b+X+Xn+Qj3MreG1jMe9uLaWhxU9SlJvzZlnB4dgx8cPiDmKlhjMNFEchYwyejRupfvZZ6t58C+PzEbFgAf6Lz+Je52tsqcnhskmXcddxdxHh6l7LnPqCTQT+vgSPI4qUO97HEXv4vnLqvHWs3LuSZfnL+Lj4Y3xBHymuaKaaED70V3N9+iK+e+ovrI7j2vnnZwX86JUtzB8bzxPXHUdseM+GyPT4Any4o5y3t+xjeU4pdR4/MWEhLJlpBYcTxid0685epZRFA8VRxPh81L7yClXPPENLdg6OyEhily4l7qorecNs4pdrfonb6eb+E+/nzLFndj/hqjzqHjmLZl+AuqteZ9LUWYdf5yAN3gZWFlpBY1XRKs7JOoefLfxZp0NGvr6pmP/59wYmJEfx9NcWkBLT9c1MjS1+Vm4v560tJby/rYxGb4DYcBeLp6eyZOYoFk5KGtY3NCk1nGmgOIqU/frXVD7xV0InTST+K18h5sKLqA/xcf+n97N8z3KOTzuen5/8c1IjU7ufaF0xLY+fTVNdNc/N+Au3XnFBn/PpC/gIcYQctj5g1c4Kbv7HWhKj3Pzja8eTdVBnbnUeHytyynhzcwkf7CinxR8kMdLN2TNGsWTmKE6ckHjEtFNXajjTQHGU8JWVkbv4bKIXLyb9V/+HiPB5yef8cNUPqfJUcccxd3DtjGt7Nuh7YyXm70tortzDN50/4Q/fu5HosJ4VA/XVxr01XP/31TgdDp762nGkx4azLLuUt7aU8PGuSryBIKkxoZw7YxRLZqVxXFZC/3Z3rZTqMlD0T1MTNSgq//IYxu8n+Vv/D3/Qzx+++ANPbn2SsTFj+cN5f2B64vSeJeipg39eSqAqnxs8d/HVqy4a9CABMGd0HC/cchLX/vVzLvvzJ/gChkDQkBEXznUnjeXcmWkcMzpOK6SVGiIaKI4QvuJiap5/nrhLL6Uw1s/db15NTlUOl0++nDuPu5PwkB4O/OJrhmevxJRu4VvB7+GeeArnz+r7jW29NTEliv/cehL/9/Y20uPCWTIzjZkZMdqUValhQAPFEaLiz48CsPeyE7jttS8TFhLGQ6c/xBljzuh5Yn4vPH8tFHzCP9LvZXnBDN6+aMaQ/ymnx4Xz+yuPGdI8KKUOpYHiCOAtKKDmv/8l7qor+eGeJ0iOSObJc58kJaIXI2QFA/DSN2Dnu+Qe/zN+/MF4vnXGeMYPZDfNSqkjmjYXOQJUPPIIEhLCliWT2Fm9k9vm3ta7IGEMvP4/sPW/+M+8n5uzZzEmIYJvnj6x/zOtlDpqaKAY5lp27aL21deI+8pV/HHvM0yIncC5Wef2PCFjYNmPYP1TcMp3eSxwAbnljdy/dIb2iKqU6pIGimGu/I9/whEezvqzx5JXm8etc2/t0YhwgBUk3v8FfPIHOO4m9s79Lg+/t5NzZ4wadgO8K6WGHw0Uw5gnJ4f6t98m7tpreCT/n0yOn8zisYt7lkjAD699Cz78PzjmGljyf9z/eg4OEX58YQ+b0yqlRiQNFMNY+cN/wBETw2enpVJQV8Btc2/r2c103kZ47ipY/zScehdc9EeWbStneU4p3z5rEulxPWxSq5QakYYkUIjI5SKyVUSCItLhnYD2cueKyHYR2SUidw9mHoda86ZNNLz/PnHXX8uf855meuJ0Th99evcTaCiHJy+AXcvhgt/BGffQ5Avwk1e3Mjk1ihtO7r+xpZVSR7ehuqLYAlwKfNjZAiLiBP4ELAGmA1eJyIgpKyl/6GGc8fGsOimWooYibpt7W/fvc6jMhb8uhrIcuPIZmP81AP64YhdFNc387OJZ2j+SUqrbhuQ+CmNMDnC4P74FwC5jTJ697HPAUiB7wDM4xJrWrKHx449JvPM7PLrrKWYnz+aUjFO6t3LhOnjmCsDA9a9DpnXBtqusnsc/yuOyeZksGJcwcJlXSh11hvNpZQawt937Qntah0TkZhFZKyJry8vLBzxzA8UYQ9lDDxGSnMx7x7rZ17iP2+fe3r2riR3vwFMXQGgU3LisLUgAPPjWNsJdTn5w3tQBzL1S6mg0YIFCRJaLyJYOHksHYnvGmMeMMfONMfOTk5MHYhODovGTT2heu47Ym77G4zueYl7KPE5IO+HwK657Cp69CpImW0EicULbrO376lmeU8aNC8eTFBU6gLlXSh2NBqzoyRhzVh+TKAJGt3ufaU87ahljKH/oYULS0nhndpDyjeX88tRfdn01YQysfBA+eBAmLobLn7SuKNp59INcItxOrjtp7MB+AKXUUWk4Fz2tASaJyDgRcQNXAq8OcZ4GVMP7K/Fs2kTMN27kie1PcXza8Rw36rjOVwj44dX/ZwWJudfAVc8eEiT2VjXx6sZivrJgDHER7gH+BEqpo9FQNY+9REQKgROBN0TkHXt6uoi8CWCM8QO3A+8AOcDzxpitQ5HfwWCCQcoffhjXmDG8MaWRKk8Vt8+9vfMVWhqseyS++Id1j8TSP4Lz0LEkHv8oD4fAjadoc1ilVO8MVaunl4CXOpheDJzX7v2bwJuDmLUhU//uu7Rs20bCL+7nb9sf5uSMk5mbMrfjhRvK4ZnLoWQjXPB7mH9Dh4tVNLTw7zV7ueSYDNJi9eY6pVTvaDfjw4AJBCj/wx9xT5jAy+Mqqd1U2/nVRG2hdSNd/T7rHokpSzpN98mP8/EGgnzjtAmdLqOUUocznOsoRoy6N97Am5tL1K038tS2f7Bo9CJmJs3seOG1f4OaPdY9El0EiXqPj6c+zefcGaOYoGNNKKX6QAPFEDM+H+V//BOh06bxQloh9d56bpt7W+crFG+AlOkH3CPRkWc+30O9x8+ti/RqQinVNxoohljNyy/j27OHiFu/xj+3/4vFYxczNaGTm+KMgZINkD6nyzQ9vgBPrNrNwolJzM6M6/c8K6VGFg0UQyjo9VLxyJ8JmzOb5xJ20uRr4ptzvtn5CrWF0FQJaXO7TPe/64sor2/RqwmlVL/QQDGEap5/AX9JCWG33MAz25/l3HHnMjG+i2FJSzZYz10EikDQ8JcPc5mTGctJExL7Nb9KqZFJA8UQCTY3U/rnPxM+fz7/jNxES6CFW+fc2vVKJRtBnDCqk4pu4M3NJRRUNnHrognd721WKaW6oIFiiKz9yS+hspIVp5zDv3c8zwXjL2Bc7GFuiiveAMlTwdXxPRHGGP68MpfxyZGcPX1U/2daKTUiaaAYAo2rVxP16vO8kXUCv2z6CF/Axy2zb+l6pbaK7LmdLvLhzgqyS+q45bQJOBx6NaGU6h8aKAZZoKGB4rt/QFlkItsuuwR3/Gr8tfOprY/pesW6Ymgs77J+4pH3dzEqJoyL53baG7tSSvWYBopBVvqL/8W3bx8PzruS4KiPCXFAtOdcbnp6LWV1ns5XbKvI7rhp7LqCaj7fXcXXTxmHO0S/VqVU/9F/lEFU/9571P73v+SedSk7U2NZX/0Ol02+jL9dcw61zT5uenotHl+g45VLNoI4YNSsDmf/eWUucREurlowZgA/gVJqJNJAMUj8lZWU/OjHhE6fxhPjz2DMmB0ETIAbZt7A9PQYHrryGDYV1fLd5zcSDJpDEyjeAElTwB1xyKwdpfUszynluhOziAzV7ruUUv1LA8UgMMZQ8uP7CDY0EPajn7JxXxPOqK1MT5xORpRVn7B4eio/WDKVNzaX8PvlOw5NpIuK7Ec/yCXc5eT6k7IG7DMopUYuDRSDoPa/L9Hw3nsk/8//8JE/Ggmpo9S7gzNGn3HAcjedMp4r5mfy8IpdvLKh3WB+dSXQUNph/URhdROvbijmqgVjiI/UgYmUUv1PA8UA8xYWUfqLXxBx3HEkXHctK7aVkZi8C4DTx5x+wLIiws8unsXx4xK48z+bWFdQbc0o2Wg9d9Di6YmPdiMCX9eBiZRSA0QDxQAygQAld98NQPqD/4s3aFi1s4LYpO1kRmUyKW7SIeu4Qxw8es2xpMWG8Y1/rKWwuslu8SSHVGRXNrTw3Jo9XDw3g/Q4HZhIKTUwNFAMoKqnnqZp7VpS77kHV0YGq3dX0ehvojKQzRljzui0i434SDd/ve44WvxBbnxyLf7CLyBp8iHjYT/5ST4t/iDfOG38YHwcpdQIpYFigHh27KD8d78j6qwzib3kYgBWbCsjLGYnAePj9NGnd7n+xJQoHrl6HrvKG6jfvYbgQfUTDS1+nvokn7OnpzIxJXqgPoZSSmmgGAjG66X4ru/jiIkh7YEH2q4c3t9WRuqoncSHxnc+HnY7p0xK5sFzUokPVLK8+sC+m579fA91Hj+3Luqit1mllOoHGigGQPkf/0TLtm2k/fSnhCQkAJBX3kB+ZT2Nzi2cNvo0Qhzdu9/h8rRKAJ7IjeXZ1XsAaPEHeGJVHidNSGTu6LgB+QxKKdVK787qZ03rv6DyiSeI/dJlRJ+xv3hpxbYynBF5tAQbD1vsdICSDRiEuAnz+dHLWxibGMGeyiZK61r49eVdj3SnlFL9QQNFPwo2NlL8/e/jSksj9e4fHDBvxbYyklJ3EnSGcWL6id1PtHgDkjiRX19zMpc98gm3/nM9UaEhzMqIZeHEpH7+BEopdSgteupHpb/8P3yFhaT/8kGcUZFt0+s9PlbvroSIrZyUfhLhIT1oylqyAdLmEBPm4q/XHYfTIRTVNOvAREqpQaNXFP2k4YMPqHn+eRJu/BoR8+cfMG/VzgqC7kKagpWH3GTXdaLlUFfU1nXHmMQInrzhOJZll3LODB2YSCk1ODRQ9AN/dTXF995L6OTJJN9xxyHzV2wrIzJuGw5xcFrmad1PuIM7smdnxjE7M65vGVZKqR7QQNFHxhj2/eR+AjW1jHn8cRzuA/tbCgYN728vI3LMNqalzCM+LL77iZd8YT2nze7HHCulVM9oHUUf+fbupf6dd0j6xjcImzr1kPmbi2qpbCmh0RT2rLUTWF2LJ4yHsNj+yaxSSvWCBoo+asnLAyDy5JM6nL9iWxmu6Gzg0E4AD6tkY5dDnyql1GDQQNFH3vx8ANxZWR3Of397GbFJ25kcP5nR0aO7n3BjJdTu7XQMCqWUGiwaKPrIW1CAIzYWZ1zcIfPK6jxsLimixZnX82KntjGy5/Y1i0op1SdDEihE5HIR2SoiQRGZ38Vy+SKyWUQ2iMjawcxjd/kKCnCPHdvhPQ0rt5fjjNqGIcgZY87oYO0utAUKvftaKTW0huqKYgtwKfBhN5Y93Rgz1xjTaUAZSi35+bizxnY4b8W2MqLitzEqYhTTEqb1LOHiDRCfBeFxfc2iUkr1yZAECmNMjjFm+1Bsuz8FPR78Jftwjz00UHj9QVblFmPCd3D6mNN7fhe1VmQrpYaJ4V5HYYB3RWSdiNzc1YIicrOIrBWRteXl5YOSOe+ePWBMhxXZa/Kr8ITkEMTb82KnpiqoKdCKbKXUsDBgN9yJyHKgo34m7jHGvNLNZBYaY4pEJAVYJiLbjDEdFlcZYx4DHgOYP3++6VWme8hbUACAe2zWIfPeyynDHZtDtCuaY1OP7VnCXYyRrZRSg23AAoUx5qx+SKPIfi4TkZeABXSvXmNQ7G8ae2jR04rtJbiTtnHq6NNwOVw9S1grspVSw8iwLXoSkUgRiW59DZyNVQk+bHgLCnAmJeGMOnAs690VjextyiYgDZwxuofFTmBVZMeNgYiE/smoUkr1wVA1j71ERAqBE4E3ROQde3q6iLxpL5YKrBKRjcBq4A1jzNtDkd/O+PILOqzIXrGtjJCobFwONydnnNzzhLUiWyk1jAxJp4DGmJeAlzqYXgycZ7/OA4Z12UtLQT5Rp556yPT3tu0jPC6HE9KOJ9IV2cGaXWiugerdMO+r/ZNJpZTqo2Fb9DTcBRoaCZRXHFKR3dDiZ21RNgFnZc9bO0G7iuxhHSOVUiOIBope8hbkAxxS9LRqZzlEbkUQFo1e1POE2yqyj+lT/pRSqr9ooOglX2vT2IPuoVixrYzQmGxmJc0mKbwXY1qXbITY0RCZ2A+5VEqpvuuyjkJEXsO66a1DxpiL+j1HR4iW1qaxY/b3CBsMGlbs2gFpRZw59oreJVy8QYudlFLDyuEqs39tP1+KdfPcP+33VwGlA5WpI4GvoICQtDQc4eFt07YU11IrGwiD3jWL9dRCVS7Mvar/MqqUUn3UZaAwxnwAICK/OahTvteGa2+ug8XbQdPYFdvKCInOZkx0FlmxWT1PtGST9axNY5VSw0h36ygiRWR86xsRGQf0sN3n0cWbn39IoFi+bTchEXksHntm7xLVMSiUUsNQd++j+DawUkTyAAHGAl120nc081dXE6itPaAiu7y+hW11awiP7sXYE61KNkJMBkQl909GlVKqHxw2UIiIA4gFJgFT7cnbjDEtA5mx4aytxVO7K4r3t1vFTvHuRGYmzexdwsUb9GpCKTXsHLboyRgTBO4yxrQYYzbajxEbJKBdr7HtrijeyynEFbWds7LOwCG9aHXcUg+Vu7TFk1Jq2OnuP9pyEfmeiIwWkYTWx4DmbBjzFhSAw4E7M8N67w/ycdHn4OjF2BOtSjYBRsegUEoNO92to/iy/Xxbu2kGGN/Bskc9b34+rsxMxO0GYG1+Fb6wzUQ7IlgwakHvEtUxKJRSw1S3AoUxZtxAZ+RIcnDT2Pdy9uGKzmZhxkLcTnfvEi3ZANFpEJ3aP5lUSql+0u3eY0VkJjAdCGudZox5eiAyNZwZY/Dm5xM7b17btHdz1yDxDZyd1ctmsaB3ZCulhq1uBQoRuQ9YhBUo3gSWAKuAERcoAhUVBJua2iqy88obKA2sIxwnCzMX9i7Rlgao2AEzLum/jCqlVD/pbmX2l4AzgX3GmBuwxomIHbBcDWNtw5/aRU+vbyrBFb2VucnziXHH9C7RfZvRimyl1HDV3UDRbDeT9YtIDFAGjD7MOkeltqax47IAeHnLJhyhFZwzrpetnUArspVSw1p36yjWikgc8DiwDmgAPh2oTA1n3oICxOXClZbGjtJ69jTsIDwO5qbM7X2iJRsgKhVi0vopl0op1X+62+rpm/bLR0XkbSDGGLNp4LI1fHnz83GNHo04nby+qQRneBEhEsLEuIm9T1QrspVSw1h3K7P/AXwIfGSM2TawWRrevPkFuLOyMMbw+qZi4hPKGBM/qffNYr2NULEdpl3YvxlVSql+0t06ir8BacAfRCRPRF4UkTsGMF/DkgkG8e7Zg3vsWHJK6skrbyAQUsj0xOm9T7R0K5igVmQrpYat7hY9vS8iHwLHAacDtwAzgIcGMG/Djn/fPkxLC+6sLF7fVEyIuwZPsL5vgaJ4g/WsFdlKqWGqu0VP72GNP/Ep8BFwnDGmbCAzNhy1tnhyjR3D6x+WMC2rjnxgWsK03idasgEikiAmvT+yqJRS/a67RU+bAC8wE5gNzBSR8K5XOfq03kORF5rAnqomMlKrcIqTyRtegJzXwXQ6vHjnijdYxU4i/ZlVpZTqN90tevofABGJBq4H/o41hnbogOVsGPLmFyDh4bxR5CPEIfhD9jIhMp3Qj+0SuNRZsOj7MOV8cHQjBvuaoXwbTFkysBlXSqk+6NYVhYjcLiL/Br4AlmJVbo+4fzdvfj7uMWN4fUspCyclsrNmG9NDE62Zp90Nvib49zXwl1Mh5zUIBrtOsHQrmIBWZCulhrXuFj2FAb8FphpjzjLG3G+MWTGA+RqWvAUFNKWkU1TTzKnT3FR5qpgWDAEEFn4bblsNl/ylXcA4BbJf7TxgFH9hPWtFtlJqGOtWoDDG/BpwAV8FEJFkERlRXY8bvx9vYSE7XPG4nQ5SkysAmO5pgrjR4AoHZwjMudIOGI+B3wPPf7XzgFGyAcITIDZz8D+QUkp1U3eLnu4Dvg/8wJ7kAv45UJkajnxFReD384knnNOmJJNfvwOHOJhSXQKJkw5c2BkCc75sBYxLH98fMB5dCNmv7A8YxRu1IlspNex1t+jpEuAioBHAGFMMRA9Upoaj1qax2c44LpidRnZlNuNjxxFemQeJnXTf4XDC7Cv2B4xACzx/LTx6Mmz+D5TnaLGTUmrY626g8BpjDNbwp4hI5MBlaXhqbRpbGZfCWdNSyanMYVrMOPDWQ9Kkrlc+IGA8AQEfvHgjBP1aka2UGvYOGyhERIDXReQvQJyI3AQsx+pJtldE5Fcisk1ENonIS3bPtB0td66IbBeRXSJyd2+31x88+QU0usI5ds54mgLVlDeXM90Vb81MnNC9RBxOmH053PY5XPZXmP1lGL9owPKslFL94bCBwr6SuBz4D/AiMAX4sTHmD33Y7jJgpjFmNrCD/XUfbUTECfwJqxnudOAqEelDXxl9U5Gzk6LIRM6fnUFOVQ4A0wJ23cLBdRSH43DCrC/BpY9B2Igc/0kpdQTpbtHTeqDGGHOnMeZ7xphlfdmoMeZdY4zffvsZ0FGznwXALmNMnjHGCzyHdQ/HkGjJz2dfTApnTE0huzIbQZja1AAh4RCTMVTZUkqpAdfdQHE88KmI5NrFRZtEpL/Go/ga8FYH0zOAve3eF9rTOiQiN4vIWhFZW15e3k9Zs3ibPURUVxA+Lotwt5PsymzGxowlsjrfKnbqzl3YSil1hOruCHfn9DRhEVmO1c3Hwe4xxrxiL3MP4Af+1dP0D2aMeQx4DGD+/Pm96HSpc2s+3kwChnFzpwKQU5XDvJR5sGEZjJrZn5tSSqlhp7t9PRX0NGFjzFldzReR64ELgDPtepCDFXHguNyZ9rRB98WnmzgTmH3CLKo8Vexr3Mf0+ClQ/TjMuGQosqSUUoNmSMpMRORc4C7gImNMUyeLrQEmicg4EXEDVwKvDlYeW3n9QUq27AAgasJ4ciqtiuzp7nirn6bO7qFQSqmjxFAVrv8R64a9ZSKyQUQeBRCRdBF5E8Cu7L4deAfIAZ43xmwd7Iyu2lVOYk0pgdg4nDExZFdmAzDVb18EHe4eCqWUOsJ1t46iXxljOjwNt+/4Pq/d+zeBNwcrXx15fVMJJzVVEDkuC7DqJ8ZEjyG6ptBaoLv3UCil1BFKm+t0weMLsGxrKVmeKkKzsgDIrsxmWuI0qNxljUwXHj+0mVRKqQGmgaILH+4ox9fYSGR9Ne6sLGpbailqKLKGPq3cpfUTSqkRQQNFF17fVMLUQA0A7qyxbfUT0xOnW4EiSQOFUurop4GiE83eAMtzSjk3zrqB3J2Vtb/rjshMaCjVKwql1IiggaIT728vo8kbYEFIAwDuMWPIrswmIyqDuAb7zu+e9vGklFJHIA0UnXh9UzFJUaGk1pcTkpKCIyLC6lq8tX4CtGmsUmpE0EDRgcYWPyu2lXHerFH4CgpwZ2VR761nT/2e/fUT4oD4rKHOqlJKDTgNFB14b1sZHl+QC2an483Pxz12LNuqtgFYTWMrdkLcWAgJHeKcKqXUwNNA0YHXNxaTGhPKMXEOAtVW09jWFk/aNFYpNdJooDhIvcfHyh3lnDcrDf/ePcD+prGpEakkhiVAZa7WTyilRgwNFAdZll2K128XOxVYnea2No2dnjgd6orB16hddyilRgwNFAd5fVMJGXHhzBsTh3d3Pjgc+EYlkF+bv7/rDtCmsUqpEUMDRTu1TT4+2lnO+bPTEBG8BQW40tLY0bAbg2FG4gyo3GktrHUUSqkRQgNFO+9k78MXMFwwOw0Ar9009sCK7FxwRUBM+lBmVSmlBo0GinZe31TCmIQIZmXEYoxpaxqbU5VDcngyyRHJVtPYxAkgMtTZVUqpQaGBwtbk9bMuv4oL7GKnQFUVwYaGtiuKaYnTrAUrd2n9hFJqRBmSgYuGowh3CJ/98Ez8AWvkOm9+PgBmdBp5e/M4a+xZ4G+BmgKYdfkQ5lQppQaXBop2osNcba+9+VbT2L2xfoJ7glb9RHU+mKDeQ6GUGlE0UHTCW1AAISHkhFYC9hgUe9ZaM/UeCqWOSD6fj8LCQjwez1BnZciEhYWRmZmJy+U6/MI2DRSd8Obn487MJLtmGwlhCaRGpOo9FEod4QoLC4mOjiYrKwsZgQ1SjDFUVlZSWFjIuHHjur2eVmZ3orVpbE5lDtMSp1kHVeVOiEqFsJihzp5Sqhc8Hg+JiYkjMkgAiAiJiYk9vqLSQNEBEwziLSjAOSaT3JpcpidMt2ZU5uqNdkod4UZqkGjVm8+vgaID/rIyjMdDdXIYfuO36ifAvodCA4VSamTRQNGB1qax+bE+wB6Dorkamio0UCileq2mpoZHHnmk1+tnZWVRUVHR5TLr1q1j1qxZTJw4kW9961sYY3q9vVYaKDrQ2jR2a3glsaGxpEemW8VOoE1jlVK91tdA0R233norjz/+ODt37mTnzp28/fbbfU5TWz11wFtQgISGst4UMC2htSK7tcWTXlEodTS4/7WtZBfX9Wua09NjuO/CGZ3Ov/vuu8nNzWXu3LksXryY++67j6VLl1JdXY3P5+NnP/sZS5cupbGxkSuuuILCwkICgQA/+tGP+PKXv9yWTnNzM5deeimXXnopN910U9v0kpIS6urqOOGEEwC49tprefnll1myZEmfPpcGig548/NxjRnNjtpdfDXjq9bEip0gTh0nWynVaw8++CBbtmxhw4YNAPj9fl566SViYmKoqKjghBNO4KKLLuLtt98mPT2dN954A4Da2tq2NBoaGrjyyiu59tprufbaaw9Iv6ioiMzMzLb3mZmZFBUV9TnfGig64C0owDs6BV8w/8A+nuKzwNn9m1SUUsNXV2f+g8UYww9/+EM+/PBDHA4HRUVFlJaWMmvWLL773e/y/e9/nwsuuIBTTjmlbZ2lS5dy1113cfXVVw9aPrWO4iDG78e7dy8VSVZAmJFgH0yVu7R+QinVr/71r39RXl7OunXr2LBhA6mpqXg8HiZPnsz69euZNWsW9957Lw888EDbOieffDJvv/12h5XUGRkZFBYWtr0vLCwkIyOjz/nUQHEQX0kJ+HwUxHiJdkWTGZ0JwaDeQ6GU6rPo6Gjq6+vb3tfW1pKSkoLL5eL999+nwB5+ubi4mIiICK655hruvPNO1q9f37bOAw88QHx8PLfddtsh6aelpRETE8Nnn32GMYann36apUuX9jnfGigO0triaXNEFVMTp1oV2XVF4G/WQKGU6pPExEROPvlkZs6cyZ133snVV1/N2rVrmTVrFk8//TRTp04FYPPmzSxYsIC5c+dy//33c++99x6QzkMPPURzczN33XXXIdt45JFH+PrXv87EiROZMGFCnyuyYYjqKETkV8CFgBfIBW4wxtR0sFw+UA8EAL8xZv5A5631Hoo1IYWcl3CqNVGHP1VK9ZNnnnnmgPeffvrpIctkZWVxzjnnHDI93/5/Avj73//eYfrz589ny5YtfcvkQYbqimIZMNMYMxvYAfygi2VPN8bMHYwgAXavsRHhlId721Vk6z0USqmRa0gChTHmXWOM3377GZDZ1fKDyZufjyctHkQO7LrDHWV1CKiUUiPMcKij+BrwVifzDPCuiKwTkZsHIzPeggIqklxEhEQwNmasNbFyl1XsNMI7E1NKjUwDVkchIsuBUR3MuscY84q9zD2AH/hXJ8ksNMYUiUgKsExEthljPuxkezcDNwOMGTOmV3k2Xi++oiLyp6YyNWEqDrHjaOVOyFzQqzSVUupIN2CBwhhzVlfzReR64ALgTNNJr1XGmCL7uUxEXgIWAB0GCmPMY8BjAPPnz+9VL1jewkIIBtkaUc30RLsiyeeBmr0wd/BublFKqeFkSIqeRORc4C7gImNMUyfLRIpIdOtr4Gygf6vyD9LaNLYg1re/fqIqDzDa4kkpNWINVR3FH4ForOKkDSLyKICIpIvIm/YyqcAqEdkIrAbeMMb0vRvELrQ2jS1JgGkJ7bruAA0USqk+G4xuxu+55x5Gjx5NVFRUr7dzsKFq9TTRGDPabvY61xhziz292Bhznv06zxgzx37MMMb8fKDz5S0owBsZSiAqnHGx9niyeg+FUqqfDEY34xdeeCGrV6/u1zS1U8B2vPn5lCe5mJIwBafDaU2szIXoNAjtv+islBoG3rob9m3u3zRHzYIlD3Y6e6C7GQfauhjvTxoo2vEWFJCf0rK/fgJ0+FOlVL8Z6G7GB4oGCpvx+wmmJLAzuYwTWusnwKqjmN73TrWUUsNMF2f+g0W7GT/CSEgIuQ/eyJsLHPuvKJqqoLlKu+5QSg2I/u5mfKBooGgnpyoHt8PN+Ljx1gRt8aSU6kcD3c34QNFA0U52ZTZTEqbgctij2FVoiyelVP8ZjG7G77rrLjIzM2lqaiIzM5Of/OQnfc63DObly2CZP3++Wbt2bY/WMcZw8rMns2TcEn504o+sict/Ap/8Ee7ZB06tzlHqSJeTk8O0adMOv+BRrqP9ICLrOuulW//9bH7j564Fd5EVk7V/YuUuSBinQUIpNaLpP6DN5XBx8cSLD5xYsUuLnZRSI57WUXQmGLD6edJAoZQa4TRQdKZ2LwRaNFAopUY8DRSdaW0aq/dQKKVGOA0UnanQeyiUUgo0UHSucheExkJk8lDnRCl1lBiMbsbPPfdc5syZw4wZM7jlllsIBAK93l4rDRSdqdwJSTpOtlKq/wxGN+PPP/88GzduZMuWLZSXl/PCCy/0OU1tHtuZylwYe9JQ50IpNUB+ufqXbKva1q9pTk2YyvcXfL/T+YPRzXhMTAxg9Uzr9XqRfjjZ1UDREW+T1eopUSuylVL9Z7C6GT/nnHNYvXo1S5Ys4Utf+lKf862BoiNVedZz4oShzYdSasB0deY/WAaqm/F33nkHj8fD1VdfzYoVK1i8eHGf8ql1FB1pHf5Um8YqpQbQQHYzHhYWxtKlS3nllVf6nE8NFB1pvYciYfzQ5kMpdVQZ6G7GGxoaKCkpAaxirTfeeKOtR9q+0EDRkYpdEJMJ7sihzolS6igy0N2MNzY2ctFFFzF79mzmzp1LSkoKt9xyS5/zrd2Md+TxM60gcd2r/ZcppdSQ027GLT3tZlyvKA5mjH0PhdZPKKUUaKA4VFMleGq16w6llLJpoDhY2/CnekWhlFKggeJQrU1j9R4KpZQCNFAcqnIXON0QN2aoc6KUUsOCBoqDVeyy7p9wOIc6J0opNSxooDhYpY6TrZQaGAPdzXhTUxPnn38+U6dOZcaMGdx999293lZ7GijaC/itfp60aaxSagAMRjfj3/ve99i2bRtffPEFH3/8MW+99Vaf09ROAdur3QNBn15RKDUC7PvFL2jJ6d9uxkOnTWXUD3/Y6fyB7mY8IiKC008/HQC32828efMoLCzs8+fSQNFe2/CnekWhlOp/g9XNOFhXL6+99hp33HFHn/M9ZIFCRH4KLAWCQBlwvTGmuIPlrgNaOzr5mTHmqQHLVKWOk63USNHVmf9gGahuxv1+P1dddRXf+ta3GD++752bDmUdxa+MMbONMXOB14EfH7yAiCQA9wHHAwuA+0QkfsByVLkTwuMhMnHANqGUUq0Gqpvxm2++mUmTJvHtb3+7X/I5ZIHCGFPX7m0k0NGnPgdYZoypMsZUA8uAcwcsU9riSSk1gAa6m3GAe++9l9raWn7/+9/3W76HtNWTiPxcRPYCV9PBFQWQAext977QntZRWjeLyFoRWVteXt67DFXs0voJpdSAGehuxgsLC/n5z39OdnY28+bNY+7cuTzxxBN9zveAdjMuIsuBUR3MuscY80q75X4AhBlj7jto/e/Z039mv/8R0GyM+XVX2+1VN+MBPzxzBUw9H467sWfrKqWOCNrNuKWn3YwPaGW2Measbi76L+BNrPqI9oqARe3eZwIr+5yxjjhD4Kv/HZCklVLqSDZkRU8i0r6MZynQUYPmd4CzRSTersQ+256mlFJqkAzlfRQPisgUrOaxBcAtACIyH7jFGPN1Y0yV3Yx2jb3OA8aYqqHJrlLqaGCMQUSGOhtDpjfVDUMWKIwxl3UyfS3w9Xbv/wb8bbDypZQ6eoWFhVFZWUliYuKIDBbGGCorKwkLC+vRenpntlJqxMjMzKSwsJBet4w8CoSFhZGZmdmjdTRQKKVGDJfLxbhx44Y6G0cc7T1WKaVUlzRQKKWU6pIGCqWUUl0a0Duzh4qIlGM1ue2NJKDzIaRGJt0nh9J9cijdJ4c6kvbJWGNMckczjspA0Rcisraz29hHKt0nh9J9cijdJ4c6WvaJFj0ppZTqkgYKpZRSXdJAcajHhjoDw5Duk0PpPjmU7pNDHRX7ROsolFJKdUmvKJRSSnVJA4VSSqkuaaCwici5IrJdRHaJyN1DnZ/hQkTyRWSziGwQkR4OG3h0EJG/iUiZiGxpNy1BRJaJyE77OX4o8zjYOtknPxGRIvtY2SAi5w1lHgebiIwWkfdFJFtEtorIHfb0I/5Y0UABiIgT+BOwBJgOXCUi04c2V8PK6caYuUdDe/BeehI496BpdwPvGWMmAe/Z70eSJzl0nwD8zj5W5hpj3hzkPA01P/BdY8x04ATgNvt/5Ig/VjRQWBYAu4wxecYYL/Ac1qh7SmGM+RA4eMCspcBT9uungIsHM09DrZN9MqIZY0qMMevt1/VADpDBUXCsaKCwZAB7270vtKcpMMC7IrJORG4e6swMI6nGmBL79T4gdSgzM4zcLiKb7KKpI66Ipb+ISBZwDPA5R8GxooFCHc5CY8w8rGK520Tk1KHO0HBjrDbm2s4c/gxMAOYCJcBvhjQ3Q0REooAXgW8bY+razztSjxUNFJYiYHS795n2tBHPGFNkP5cBL2EV0ykoFZE0APu5bIjzM+SMMaXGmIAxJgg8zgg8VkTEhRUk/mWM+a89+Yg/VjRQWNYAk0RknIi4gSuBV4c4T0NORCJFJLr1NXA2sKXrtUaMV4Hr7NfXAa8MYV6GhdY/Q9sljLBjRaxBuP8K5Bhjfttu1hF/rOid2Ta7Kd/vASfwN2PMz4c2R0NPRMZjXUWANWzuMyNxv4jIs8AirC6jS4H7gJeB54ExWF3aX2GMGTGVu53sk0VYxU4GyAe+0a5s/qgnIguBj4DNQNCe/EOseooj+ljRQKGUUqpLWvSklFKqSxoolFJKdUkDhVJKqS5poFBKKdUlDRRKKaW6pIFCKaVUlzRQqBFPROJE5Jv263QR+c9Q56m3RORi7flY9TcNFEpBHPBNAGNMsTHmS0ObnT65GKurfKX6jQYKpeBBYII92M4LrYPxiMj1IvKyPdhMvojcLiLfEZEvROQzEUmwl5sgIm/bPex+JCJTO9uQiFwuIltEZKOIfNhuO6+IyEp7cJv72i1/jYistvP2F3vsFESkQUR+bqfzmYikishJwEXAr+zlJwzgPlMjiAYKpayBZHKNMXOBOw+aNxO4FDgO+DnQZIw5BvgUuNZe5jHg/xljjgW+BzzSxbZ+DJxjjJmD9afeagFwGTAbuFxE5ovINODLwMl23gLA1fbykcBndjofAjcZYz7B6lfoTnvgoNye7QalOhYy1BlQaph73x6Epl5EaoHX7Ombgdl2l9InAS9YfcIBENpFeh8DT4rI88B/201fZoypBBCR/wILsUZMOxZYY6cdzv6eR73A6/brdcDiXn9CpQ5DA4VSXWtp9zrY7n0Q6/fjAGrsM/7DMsbcIiLHA+cD60Tk2NZZBy8KCPCUMeYHHSTlM/s7agugv2U1gLToSSmoB6J7s6I9MM1uEbkcrK6mRWROZ8uLyARjzOfGmB8D5ewfB2WxiCSISDhWhfTHWOMrf0lEUux1E0Rk7EB9FqU6o4FCjXh2kc/HdiX2r3qRxNXAjSKyEdhK1+Ot/0pENtvb+gTYaE9fjTXgzSbgRWPMWmNMNnAv1lC0m4BlQFpHibbzHHCnXeGuldmqX2g340oNMRG5HphvjLl9qPOiVEf0ikIppVSX9IpCqQEgIvcAlx80+YWROEKgOvJpoFBKKdUlLXpSSinVJQ0USimluqSBQimlVJc0UCillOrS/weVkN/YiWpFMAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import autogluon as ag\n",
    "from autogluon import TextPrediction as task\n",
    "\n",
    "predictor_score = task.fit(train_data,\n",
    "                           label='score',\n",
    "                           time_limits=60 * 2,\n",
    "                           ngpus_per_trial=1,\n",
    "                           seed=123,\n",
    "                           output_directory='./ag_sts_mixed_score')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE= 0.7751007711455805\n",
      "Spearman Correlation= 0.8560803284633751\n",
      "Pearson Correlation= 0.8573700873570499\n"
     ]
    }
   ],
   "source": [
    "score = predictor_score.evaluate(dev_data, metrics=['rmse', 'spearmanr', 'pearsonr'])\n",
    "print('RMSE=', score['rmse'])\n",
    "print('Spearman Correlation=', score['spearmanr'])\n",
    "print('Pearson Correlation=', score['pearsonr'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "We can also train a model that predicts **genre** using the other columns as features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2020-08-05 11:43:49,708 - root - INFO - All Logs will be saved to ./ag_sts_mixed_genre/ag_text_prediction.log\n",
      "2020-08-05 11:43:49,730 - root - INFO - Train Dataset:\n",
      "2020-08-05 11:43:49,731 - root - INFO - Columns:\n",
      "\n",
      "- Text(\n",
      "   name=\"sentence1\"\n",
      "   #total/missing=4886/0\n",
      "   length, min/avg/max=16/58.03/367\n",
      ")\n",
      "- Text(\n",
      "   name=\"sentence2\"\n",
      "   #total/missing=4886/0\n",
      "   length, min/avg/max=15/57.83/311\n",
      ")\n",
      "- Categorical(\n",
      "   name=\"genre\"\n",
      "   #total/missing=4886/0\n",
      "   num_class (total/non_special)=3/3\n",
      "   categories=['main-captions', 'main-forums', 'main-news']\n",
      "   freq=[1709, 382, 2795]\n",
      ")\n",
      "- Numerical(\n",
      "   name=\"score\"\n",
      "   #total/missing=4886/0\n",
      "   shape=()\n",
      ")\n",
      "\n",
      "\n",
      "2020-08-05 11:43:49,731 - root - INFO - Tuning Dataset:\n",
      "2020-08-05 11:43:49,731 - root - INFO - Columns:\n",
      "\n",
      "- Text(\n",
      "   name=\"sentence1\"\n",
      "   #total/missing=863/0\n",
      "   length, min/avg/max=16/55.89/196\n",
      ")\n",
      "- Text(\n",
      "   name=\"sentence2\"\n",
      "   #total/missing=863/0\n",
      "   length, min/avg/max=15/55.84/197\n",
      ")\n",
      "- Categorical(\n",
      "   name=\"genre\"\n",
      "   #total/missing=863/0\n",
      "   num_class (total/non_special)=3/3\n",
      "   categories=['main-captions', 'main-forums', 'main-news']\n",
      "   freq=[291, 68, 504]\n",
      ")\n",
      "- Numerical(\n",
      "   name=\"score\"\n",
      "   #total/missing=863/0\n",
      "   shape=()\n",
      ")\n",
      "\n",
      "\n",
      "2020-08-05 11:43:49,732 - root - INFO - Label columns=['genre'], Problem types=['classification'], Label shapes=[3]\n",
      "2020-08-05 11:43:49,732 - root - INFO - Eval Metric=acc, Stop Metric=acc, Log Metrics=['acc', 'nll']\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ee38e4d3d6bd4fecbf5ca1336a29a7dc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=4.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 52%|█████▏    | 319/612 [00:57<00:53,  5.50it/s]\n",
      " 57%|█████▋    | 351/612 [01:00<00:44,  5.82it/s]\n",
      " 55%|█████▍    | 335/612 [01:00<00:50,  5.51it/s]\n",
      " 55%|█████▍    | 335/612 [01:01<00:50,  5.44it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEXCAYAAAC3c9OwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABFfklEQVR4nO3deXwb9Zn48c8j2ZZ82/GZOIdzHxAIEALlKLS0BGiBAuUu9NhfWXZLd+lytqWlpRf0oKVbCoVdaKGUhKN0uQo9INByJxACsXOfdmLHjuPbknU8vz9m7MiO7NiOZSX283699JI0852ZR6PRPJrvd+Y7oqoYY4wxvXmSHYAxxpiDkyUIY4wxcVmCMMYYE5clCGOMMXFZgjDGGBOXJQhjjDFxWYJIMhEpEZFXRaRFRH6W7HjGGhG5XET+Mtxlh4uIfENE/mcEljNZRFpFxJvoZQ2UiGwRkU8kO47hMMjt7Dsi8vtExzQQliCGwN1wO9wfVK2I/FZEsoY4u6uAeiBHVa8bxjBHLRG51133rSLSKSKhmPd/Hsy8VPURVT19uMsO1P4+i6r+UFX/33AuMx5V3aaqWaoaSfSyEkFEviAi/4wzvDvJuGUi7rptFpGVIvLpmLJ5InKPiNSISLuIfCAiX+xjeZNjvqdWEVERaYt5f3Js+URsOyPBEsTQna2qWcDRwELglsFMLA4PMAWo0CFcsSgiKYOdZjRQ1avdnVkW8ENgadd7VT2zq9yhsH4G+lnMsHnDXdd5wP8Cj4lIvoikAX/D+T1+BMgFbgBuF5H/6j2TmITa9d0BHBkz7B9dZQ+F7bAvliAOkKpWA38GDgcQkeNF5HURaRSR90Xk1K6yIrJMRH4gIq8B7cBDwOeBG91/HZ8QEZ+I/EJEdriPX4iIz53+VBGpEpGbRKQGeNA9HH1cRH7vVlN9ICKzROTrIrJLRLaLyOkxMXxRRCrdsptE5F9jxnXN/zp32p2x/6BEJF1EfiYiW0WkSUT+KSLp+/vcsdzYn+g17C4R+aX7+gtuXC0isllELh/M9+H+Y7xJRFYBbSKSIiI3i8hGd54VInJeTPke/zzdf4JXi8h697PcLSIyhLJed13Vu5/jGrf8oHYWElPdICLl7jy+6H6ve9zlHysiq9wYftVr+i+53/ceEXlRRKb0sZzy2PjcbfV7IvKau97+IiKF/cT5aXH+kTe628ERMeP6XP/u+C/HbJMVInJ0zOgF7mdrEpGlIuIfzPrri6pGgQeAdGA6cAUwGbhQVTerakhVXwD+A7hNRHIGOm93O3lNRH4uIruB78TZdu5yv8NmEVkhvY44Dhqqao9BPoAtwCfc15OA1cD3gDJgN3AWTvL9pPu+yC27DNgGHAakAKnAb4Hvx8z7NuBNoBgoAl4HvueOOxUIA3cAPpyN+ztAAFjszvMhYDPwTXf+XwY2x8z/Uzg/CAFOwUlUR/ea/23utGe54/Pd8Xe7n6EM8AInuHH0+7l7rbsp7jyz3fdeYCdwPJAJNAOz3XHjgcP28118B/h9r+9mpfu9pLvDLgQmuLFdDLQB491xXwD+GTO9As/i/MOcDNQBZwyh7NVABTARyMf5d6pAykA/S+9hQLk7j3sBP3C6+93/CWd7KQN2Aae45c8FNgBz3W3jFuD1PpbdNe+UmG11IzALZztbBtzex7RHucs9zv0+P+9+D74BrP8LgWrgWJxtcgYwJea7fNuddhxQCVzdRww9vps+fqvdZdz18Z9AC87RwhLgd3GmT8H5TSzez3aowIyY5YSBr7rTp8fZdj4HFLjjrwNqAH9f20GyHnYEMXR/EpFG4J/AKzjVA58DnlfV51U1qqp/BZbj7Di7/FZVV6tqWFVDceZ7OXCbqu5S1Trguzj/brpEgVtVNaiqHe6wf6jqi6oaBh7HSSy3u/NfApSLSB6Aqj6nqhvV8QrwFyD230vIXX5IVZ8HWoHZ4lSHfQn4T1WtVtWIqr6uqsEBfm7c5W8F3gW6/kV+HGhX1TdjPt/hIpKuqjtVdXX81d+vX6rq9q71o6qPq+oON7alwHpgUT/T366qjaq6DXgZWDCEshcBd6lqlaruAW4fwufoy/dUNaCqf8HZ2T7qbi/VwD9wdtjgJKkfqWqlu238EOcfedyjiDgeVNV17np8jL7Xw1XAb1T1LXe7+B0QxEn6+1v//w/4saq+426TG9xtpMsv3WkbgGf6iQHgePcIpvuBk7j3KYOzQ74UOE9Vm4BCnD8qPbjrrd4dPxg7VPW/3d95R++Rqvp7Vd3tjv8Zzh+t2YNcRsJZghi6z6hqnqpOUdV/dzeCKcCFvTbQk3D+CXfZvp/5TgBifyBb3WFd6lQ10Gua2pjXHUC97m1s7No4swBE5EwReVNEGtz4zqLnxr/b/VF0aXenLcT517oxTswD+dyx/oDz4wS4zH2Pqrbh/MO8GtgpIs+JyJw+5tGfHutYRK6Mqf5oxKkO7O8HXxPzuuvzD7bshF5xdL8WkZNlb2PmUBJg7++79/uuGKYAd8V87gacf+llA1zOQNfDFOC6Xt//JNztdj/rfxLxt6nBxgDwpvub7H7gHLHHK1Ooqser6t/c4fXE2V7dKrdCd/xg9Ps7F5Hr3Wq1Jned5DL4JJRwliCG13bg4V4baaaqxv573F9j9A6cH1yXye6wgU7fJ3HaMp4EfgqUuD+g53F2GvtTj1OdMT3OuIF87liPA6eKyEScI4k/dI1wj4Q+ifNjXQPcP7BP10P3OnL/Ld8PXAMUuJ/5Qwb2mQ/ETpzqpS6TuoNT/Yfubcw8LIExbAf+tdf3kq6qrydgOT/otZwMVX10AOt/O/G3qZH2N+BMEcnsNfwCnKOhN/edpF99/k7d9oYbcY4y89110kTit8lBswQxvH4PnC0ii91GSr84Db8T9zvlXo8Ct4hIkdso+G13vsMhDedQtg4Ii8iZOPXY+6V7G/XuFJEJ7uf7iJt0BvW53aqzZcCDOO0jldB9Tci57o80iFO9FT2gT+y0ayjOZ0acRvfDD3CeA/EY8J8iUuZW7900Asvs7V7g6yJyGICI5IrIhQlYzv3A1SJynDgyReRTIpLN/tf//wDXi8gx7rQzBlEFNpweBqqAx8VpsE8VkcXAL4HvuNVQwyUbp42iDkgRkW8DA24EH0mWIIaRqm7HaRj8Bs6Xvx3nVLnBrOfv49TfrwI+wKmv//4wxdeCc1bGY8AenOqdpwcxi+vdmN7Bqa64A/AM8XP/AfgEMUcPbvn/wjliasBpRP+3QcS3D1WtAH4GvIFTFTMfeO1A5jlA9+O076wC3sM5UgsDI3adgao+hfMdLRGRZpx/7sN+6qyqLsc5GeJXONvVBpxG2f2uf1V9HPgBznbQgtPgPm64Y9wfty3tEzjb7ls4J0vcCXxTVX8yzIt7EXgBWIdThRxg/1XPSSGqdsMgYxLNPVq7V1WT8e/YmCGxIwhjEkCca0bOEuc6jDLgVuCpZMdlzGDYEYQxCSAiGTinP8/BObPoOZxThJuTGpgxg2AJwhhjTFxWxWSMMSauQ7YTqd4KCwu1vLw82WEYY8whZcWKFfWqWhRv3KhJEOXl5SxfvjzZYRhjzCFFRLb2Nc6qmIwxxsSVsAQhIg+I02X0h32MFxH5pYhsEKc736Njxn1enC6U14vI5xMVozHGmL4l8gjit8AZ/Yw/E5jpPq4C7gEQkXE454wfh9Pj460ikp/AOI0xxsSRsAShqq/idJfQl3OBh9wuft8E8kRkPM59Df6qqg1uN8l/pf9EY4wxJgGS2QZRRs/+R6rcYX0N34eIXCUiy0VkeV1dXcICNcaYseiQbqRW1ftUdaGqLiwqinuWljHGmCFKZoKoJqaPfJy+86v7GW6MMWYEJfM6iKeBa0RkCU6DdJOq7hSRF4EfxjRMnw58PVlBGmMGpjkQoqYpwI7GDnY1B8n0pTA+z8+E3HSKsn14Pfu/H04wEuTNHW8SiASYkTeDyTmTSfWkjkD0yRNuaKDttddILSsj4+ij9z/BCEpYghCRR4FTgUIRqcI5MykVQFXvxekf/yycvuPbgS+64xpE5Hs49xwA5/7I/TV2GzO8olForYXmHdBcBU3Vzvv0PMgpcx65ZWj2eIKaQksgTGswTEsgRGsgTHMgTFNHB9tatlDVtoVdgW2keVMoyy5lat5EZhdO5PCSKYzL6O/umQeXtmCYnU0d7GzsoKa2kbpdDezZ1Uhzwx5adzcRaGzG09FGRjhIZqiD9HCQkCeF9lQ/bSl+Aml+fDnZZOTnkV2QS15hHuOKx1FSOo7CvDSqA+/zRu1LLKt6mbZQW/dyUzwplOeUMyNvBjMyJjNTxjElmkFpB0hzI5HG3USbG4k0NxJtaSHa0oJGBLKLIasEUnx9fqZINEp7uJ32UBvt4XbaQu0EPBF09lTSjz6a4kmzKcksoTC9EI8MX2VLNBRi1/LXaFj2d8JvvE3K+m2IQttZJ7Lw6P8ZtuUMh1HTWd/ChQvVrqQ+tKgqHeEOWjpbaAu10RpqpbWzldZQK22htu7hLSF3fGcrilKSUUJpZiklmSWUZpRSmllKYXohKZ59/+9Eo0rFzmZeWVfHyu2NaCRCdrSJ/HAd48J15Ed2MS5cx7hIXfewvEg9Kb3u6xPGu8+wqAo15LIyJZ8PUrPYkJZKdZqyOy1Ie1obiLqfUxCJ8zuLpJOi48j0FpCXVkRxRgllWeOZll/G7MJJzCueRF567ztgDl2gvYPm+kZaG5poa2iio7GJQFMzHY0NtDXWEmjeRbhtD9rehLejldRAAH+Hh7QOwR+MkBkKkhEO4tUB3OQvzQfhkJNs9xdXKrT7oCNN0NQUMlM8+DVKJBSBzigSgtROSAvvd1YgiserIM6tCFU8RMWDihBFiKKoKooS766gaSFIcUPelQvrJwjryrxsnJhDbVExXu840nAeGdFsJoSDTAs1Mj1Yw/jwDjwaok2U3d4Ie7wRdnsiNHgjBNtDFG4LMXlrmFlbo2QGISqwrgxWTvPwwVQhb9wsxDe0ypJpRZl881PzhjStiKxQ1YVxx1mCMMOtPRSkonY7a+q3s2lPNVUtO6ltq2FPZx1tkXrU04Z4goS0Ax3AHUUzUjLISs0iKy0LVaW2vYb2cEePMl6EwpRMSr0ZFJFGZjBKeluEzLYARcFOJkaCTKeDEt1NKj33NCFSqPcUUu8ppM5TxG5PAXXeou739Z5CWiSLjLSdZKesRz3b6JCdNMhuamkj4u78RZVJ4TDTO0PMCIWY0RlieijCVN84ohnjqPL62e5NYxtCFbBDI9QSYjedNHsCdHo7AcjsUGZVO4/ZVR7yWwVBQD04ty0WwOMO2/se3HIxZb3RCL7ODtJDAVIHsLPu9Lo7a5+HQJqHNn+EjjRnGBk5ZOaWUFQ0hallsygtKceTlYU3KwtPdjaezCy8WZl4srKQlBRnR9zRQaSllWhbK6GmRirW/Z33N7/G+vrNSEeY3CDMag0zrb2Tog5FQ0IwlEbIk0o4xUswNZWAN4WOVB+tqWns9nuoT4fdGREaMkI0ZrXTmtFBux/a0yDkScVDBlFPS3eC7pIZjVIUjuIPpRMO59EcGs/OznJUi0n3FJKdWkCOJ40JDeuYXFNJec0mpu7cQX5ru7NuUmDzeA9rypQ1E4V1ZUJLhlNtlqpKXgSaPULQAylhZU6VsmCT85jsnmTZmgk1kz20TPRAqYf8FKEwLORG4R++U3kq/fz9fkfxzCrJ5s6LFgxpWksQpgcNBajdVUOnrwhk8PdJ3xPcQ2X9RjbtqWZ7805q2mrYE9xFa6SeIA2op3Wff8wS9pEVzGdcOJemtBzqA6lEIn404qMwI5ep4wqYU1LEERNKmFNcRK4vh8y0TDJTMvE2bYfVf4LVT8HOlSjQ4hFqvCnUpnipSfFS402hJsVLbUoKNV4vNSkpBOPUeTsVBbHDBVCy26GgRSlohsJmZZz7uqBZKWhW8tqgIQu2Fwnbi6BtYgGp06cxbtbhTCuew4y8GUzNnYo/HHSqpGKrp5qroWMPBFsg0OQ8B5sh0IxGQnQ2p9Ben0ZrfRptu9PQZudISEVpLFR25ylhEecB3c+RAXx3UYEOX9dOX2j3gaYJqb5U/H4/mRmZ5GXnMy6vkPEFZUwsmExJ9kR8GQWQlkVrOMAHjetYuWcN7zesYdWetbSEnSqgvNRsjhw3hwX5czgyfy6H5c0gI8XvLFijsGczkdoKlu98kxea1/N32tnj9ZARjfKx9g7OiPo4IWcWaSXzoGgOFM+Fotngz+35GaJKW2dXNV7XI0RrMExrIEx9ezNVbVuo7dhCXXArndpOTkoh+WlFFKaXUJxezEztYFr7Bgr3rCS3/j18jRvcdexFSg+HiYtg0nFQOAMaNsGuNVBXCbvWENq+hY56L+31aXTU+wg0pnbfKT1ckk3TzPHsnFlEVWkKZdVBJq6uI/fD7XiCnZCaSsYxx5B18slknnwSvpkzkSH85hLJEsRYEgm5O6fq7p1TaM92WnZtJbxnO/72GnKijQBsipbyXPR4nosczxqdRM8d5748vmrSCv7BtMBKJuyJkt4JGQFID3rJCvjI7kwjO5xCTshLdggyQ4o/GCKlI4C2t4O7rXkLC8n7yjVsOfbjrKhqZsXWPby3bQ+725x/0Nm+FE6b0Ml5vnc4qmUZObvfdwIoOwamfxzSx9EU9fPhbni3JswbO0LUBlNpI4NpkyZw/KyJfHRWEZOKoK6jltq2Wmobq4gsfx9fXRP+hlb8u1vx7XafG9rwhnpVH3k9BAqyCI7LIlCQSSgvk7ymCNlVDUhVDYTd8h4PaZMn45s5E9/MGfhmzCBtxgx85eVIWtq+X09rK4FVq2h/7z06Vr5Px8qVRFtanPWSk0X6nKmkzywjfVox6ZNy8NAO4WDc7yOkUdqjIVo0RFs0REs0RJuGaY2GaNUQrdEQEY1QHBVKIhFKw2FKgh1kBFt7JCmioQFsWO56ATanprDS5+N9v4+VPh+b05xGZK8qszs7OTLQydzOTlb70vhrZgYNXi/pCKf6SllcvJATyxfjH38EpCexg4T2BqhaDlVvw/a3oGoFxLR9IB7In+okreK5exNYwQyiYSXw4Yd0rFxJ+3sr6XjvPSINe5tJUydN6k4ImYsW4ckcvmrCRLAEMdoEW6F6BdR8AE1VPf6pausupFfdarNmsEML2KnjaPWXkpY3kYKCcUyq/yfF9W8hRGnOmkbVhMVUTTiDluwZ3dNGNcqG1uW8Xv9Hdu5Zyedf9vCJd/fdoUhGBt5Mp3rBk53tVDVkulUPWZlONURWNp50P01PP0PHe+/hmz2bkptuJPOEE1BVqrZuoOGdx8nb/BxT2p0uvFZFp/J89Hgq8j9O2dQ5ZPlS+Mf6etbUODvVkhwfp8wq4pRZxZw0o5DcjJ5nvGhnJ41//CP19/6GcE2NM9DrJaWkmNTS8aSWlpJSWuo8jy91ho0vxTtuHOKJ3zCpnZ0Et2yhc8MGghs2EFy/nuD6DXRu27a3zj0lhbTyKfhmzMQ3fTrh3fV0vLeS4Lp1TqIUwTdjBulHHUX6ggWkH7WAtPLy5Py7DAX2Joxgs3uk0wydrd1JvT9N4Q7eb69mZVsVq9qrWdW+g45oCL8nlY9OOJEzZpzDSWUnkZ6SPgIfZogiYdhV4Rw9jJsGhbMg1T+gSVWV0PbtBNaswT97NmlTDq3bjluCOJSpwp4tsP3tvf92alc7h/CApmURSC9lt7eIreF8VrdmsyGYw04toMFbRHHZNOZNncAxU/I5alI++Zm9/tW21UPl0/DhH2Hra858i+YSnHcOz+Tk8tD2F9nctJkTa/P412dD+OuaGff5z5N73mfcnX4WnsxMJGXgJ8SpKi0vvMCun/6MUHU1WUdOpXhhEF+b+/2VzofDzqNt5jmsbM1nxdY93UcZHaEIx5aPc5LC7CJml2TH3alqKETjn/5E/T33EN6xk/QFCyj416vwz5tHSmEh4vUO9RvpUzQYpHPzZoLr3aThJpDQ9u14MjNJP/JINxkcRfqRR+DNzh72GA4G4WiYrc1bGZ85nozUjGSHY/bDEsRB6vkPdvLY8u09hqVGg5R3rmdGsMJ9rCbXrRLqkAw2+uawwTePDb55rIpO482dSmfE+Q4njUvnmMn5HD0ln6Mn5zOnNJsU7yBOz2uppeGDJSxd+xhLdA8NXi9HBIWvvlNM7j+qSZ08mQk/+iEZxxxzYB+8dRdU/B/R9//Inr+tor4ii2jYQ/4pcym8/pukzIg//2hUCUWj+FL63rlrOEzT/z1N/T33EKqqwn/EERR99RoyTzopaXW/0WAQSUlJSFIy5kD1lyBGzQ2DDjXhSJTbnqlgXKSOUzM2MydUyZxwJVPDm7rPsqn2TGBF6jGsSZnLmtQ5bPdOJirOTqbF8wYt6Xcz4/BS5hTM4iOT5nH0+ClDvrBoc9NmHqp4iGc2PUPQE+SjJSfwxe2p5D34T0J7qsmf2Urx6W142l+BhnzILI6ploipzw629DPcfb17PWgUT+FsCv7tq+RO+Bj1S15kz9LHaFrxbxRefTX5V3wOT686fI9H8Hni72Q1HKbp2Wep//U9hLZtwz9vHiX33kPWKackvVHQ4+v7XHxjDmZ2BJEkL66uYcej/8EXU150BqSkQ9nRMGmRe0bFIsgs3Gc6VeV/V9xDy52/4oT1HlbPyeDpw9rZWAqIdF9YND1vunNxUd4MpudNZ1L2pH2uE1BVltcu56HVD7GsahlpnjTOnn42V0y/hKyHnqHhwd+SWlrK+G9+jcyMrc5ZRFXv7BNTn1IzwZcN/hzn2ZcNvhynwe+w85xGv5idd3DDBmp/8hPaXnmV1IkTKb7+erIXn97vDl4jEZqff576X91N59at+ObOpeir15D1sY8lPTEYcyiwKqaD0Hd//SC37rqW6PyL8Rx/tVPv7u3/n38kGuFXf7qZ2T9/lil1kP6R4wm8txINBGDmVHZ94khWHZXL2lAVGxo3UN26twurNE8a5bl7E0eeL48n1z9Jxe4K8n35XDLnEi6efTEZG3ay4+s307lhI3kXXUTxjTfizYo5C6NxG6x5HsIBd8ff9cjumQzSssE7tAPU1n++xq477iC4fj3pRx9Nyc03kX7EET3KaDRK85//TP3dv6Zz0yZ8s2ZR+NVryD7ttD4bl40x+7IEcZDZVNtE692nMM3fStZ1K8G3/y4XAuEAv7v9Co5b8iFk+Jn2k1+Qc8opRJqbaX7uOfY8/jjBikrE7ydn8WLyLroQnT+HLc1bWN+4no2NG9nQuIGNjRvZ2bYTgPKccq487ErOnnY2vqiHunvuYfd995NSWMj473+frJNPSvCa6JtGIjQ++SR1d/2SyO7d5Jx9NsVfu5aU0lJa/vIX6u++m+D6DfhmzqDwK9eQffonLTEYMwSWIA4yzz74Qz699Q6aPnUvucdeut/yjbt38NJXLmTuygaa5k/hmLsfIrW4eJ9yHR+upvHxx2l+9lmibW2kTZ9O3mc/S+5nziUlf+85562drdS21zI1dyoe8RCorGTHzV8nuHYtueedR8nXb8abkzOsn3moIq1t7L7/fhoefBBESJ0wgc7Nm0mbNo2ia75C9hlnWGIw5gBYgjiIdDTWEfzFAurSpzPzxlf2eyVz9ZsvseVr15LbGKLpyrM44aaf7HeHGG1ro/mFF2l8/HE6Vq6E1FSyP3Ea+RdeSMbxx3dPr6EQ9fffT/2v78Gbn8f4795G9sc/NlwfdViFqqvZdddddG7ZyrgrriDnrDPtrCBjhoEliIPIhgeuonzr41Sc8wxHHNN3FY5Go6z/1U/ovPe37MkWfN//Oos+ecWglxdYt47GJ56g+f+eJtLUROqkSeRdcAHpRx/Frjt+TGD1anI+9SlKbvlmj6MMY8zYYAniYLHzfSK/OZWn0z7FZ77+cJ9n2YTr6lj7tX/Hs/xDVhzm4+if3c+88mMPaNHRYJCWv/6Nxscfp/2ttwDw5udT+p3vkLP49AOatzHm0GXXQRwMVGl76mt0aBbBk27sMzm0/uMfbL3hOkKtLTx9XiFfuPkRJudOPuDFe3w+cj/9KXI//Sk6t2yh7e23yT7tNFIKCg543saY0ckSxEhZtZTMXSv4kV7NTYvm7jNaOzvZ9Yu7aHjgAaqKhGeuncV3L3+AgvTh34GnlZeTVl4+7PM1xowuliBGQqCZ6Iu38IFOR466jGx/z+sdOrdto/q66wl88AF/OUpY+7kT+Onpv7R+bIwxSWXnB46EV+5A2uv5VucXuPwjU3uManrmWTafdz7NG9fys/M81Pz7udx1xj2WHIwxSWdHEIm2aw361r08m/IJfKULmVOaQ6SpiZa//Z3m556l7fU3qJmWx21nBDj7hH/h2mOuHdb73xpjzFBZgkgkVfjzjYS9Gdze8Cm+l7OWbf/6O9pefwNCIbxlE3jlUxO55/CdXLfoRq487MpkR2yMMd0sQSRQZPlSWl9+m4qaedyz7WekRiMEJ4x3LvQ68wxuqX+Ql6pe5kcn/pizpp2V7HCNMaYHSxDDLNrWRsuyZbQ8/xyty15GI/mE/W1s/+hZfPzqy/AfeSQiQm1bLX9/7yWumHeFJQdjzEHJEsQwiHZ00PrKKzT/+QVaX3kFDQRIyU0nb3orb3/0P/ha/Rxeuek00vP3Njw/uf5JohrlolkXJTFyY4zpmyWIA1R/773U/+Y+tKMDb2EheeefT86JR5D+2v8jOu9cbluzgI/NzWdiTHIIRUM8se4JTiw7kUk5k5IYvTHG9M0SxAHQcJj6e+4lff58Cq+5hoxjFzodyP3hYkhJ428Tr6F+eTWfO77nldAvb3uZuo46bp19a5IiN8aY/bPzKQ9A5+bNaDBI3oWfJfP445zksO5FWPcCnHIT/7uyg8njMvjozKIe0y1du5QJmRM4qSx591swxpj9sQRxAAKVlQD45rpdZ4QC8OeboHAWa8ov4+0tDXzu+Ml4PHv7XdrUuIm3a97mwtkX4u3j/srGGHMwsCqmAxCoqER8PnzTpjkD3vgV7NkMVzzF79/ZSVqKhwuP6dnGsHTtUlI8KZw347wkRGyMMQOX0CMIETlDRNaKyAYRuTnO+Cki8ncRWSUiy0RkYsy4iIisdB9PJzLOoQpUVuKbNQtJSYHG7fDqT2Hu2bSUncxT71Zz9hETyM9M6y7fHmrn6Y1Pc/qU0xPSCZ8xxgynhCUIEfECdwNnAvOAS0VkXq9iPwUeUtUjgNuAH8WM61DVBe7jnETFOVSqSqCyEn9X9dJfbgEUFv+QP71XTVtnhCs+MqXHNM9tfo7WUCuXzLlk5AM2xphBSuQRxCJgg6puUtVOYAlwbq8y84CX3Ncvxxl/0ApV7yDa3Ix/3lzY9ApU/AlOvg7NncTv39zG/LJcjpyY211eVXls7WPMyp/FgqIFSYvbGGMGKpEJogzYHvO+yh0W633gfPf1eUC2iHTVvfhFZLmIvCkin4m3ABG5yi2zvK6ubhhD379AZQUA/tkz4c83Qn45nPAfvLNlD2trW7ji+Ck9bgr0ft37rGlYw8WzL+7zZkHGGHMwSfZZTNcDp4jIe8ApQDUQccdNcW+DdxnwCxGZ3ntiVb1PVReq6sKioqLeoxMqWFkJHg++pn9A3RpY/CNI9fPwm1vJ8adw9pETepRfunYpmamZfHrap0c0TmOMGapEnsVUDcSewjPRHdZNVXfgHkGISBZwgao2uuOq3edNIrIMOArYmMB4ByVQUUna1Kl4VvwGpp0Ks89kV0uAFz7cyRXHl5OetvcU1oZAAy9ueZHPzvqs3efBGHPISOQRxDvATBGZKiJpwCVAj7ORRKRQpPvmB18HHnCH54uIr6sMcCJQkcBYBy2wZg3+meXQsgNmnwUiPPbOdkIR5fJeV04/tf4pQtEQF8++ODnBGmPMECQsQahqGLgGeBGoBB5T1dUicpuIdJ2VdCqwVkTWASXAD9zhc4HlIvI+TuP17ap60CSI8J49hGtq8Jf6nQFlxxCORPnDW9s4aUYh04uyustGohEeX/c4C0sWMj1vn1oyY4w5aCX0QjlVfR54vtewb8e8fgJ4Is50rwPzExnbgQhUuA3U2W3QmQIlh/PSml3saArw7bMP61H2tR2vUd1azbXHXJuESI0xZuiS3Uh9SAq6XWz4vdug5HBI9fP7t7ZRmuPnE3OLe5RdsmYJhemFnDbptGSEaowxQ2YJYggCFZWkjB+Pd88qKDuaLfVtvLqujsuOm0yKd+8qrWqp4p/V/+SCmReQ6k1NYsTGGDN4liCGIFBZiX/GZAg2Q9kxPPLWVlI8wiXH9ux36fF1j+MRD5+d9dkkRWqMMUNnCWKQom1tdG7Zgr/EaaAOFh/JY8urWHxYKcU5/u5ywUiQp9Y/xamTTqU0szRZ4RpjzJBZghikwNp1oIo/pw1SM3l6RzZNHSE+d3zPfpf+suUv7AnusVNbjTGHLOvue5C6u9jwboeio/j9W1XMKM7i+GnjepRbunYp5TnlHDf+uGSEaYwxB8yOIAYpUFmJNy+PlLbV1OcexvtVTVx+3OQe/StV7q7k/br3uWj2RXjEVrEx5tBke69BClZU4p8+EYl28rfmiaSleDjvqJ59EC5duxS/18850w+6XsqNMWbALEEMgoZCBNevx+c2UD+4JZ+zDi8lL2PvTYFaOlt4fvPznDn1THJ9uX3NyhhjDnqWIAYhuHEjGgrhz2knkDaOtYF8LlnUs9+lpzc+TUe4g4vnWOO0MebQZgliEAIVe6+gXs10phVmcdzUvY3TqsrStUuZXzifwwoO62s2xhhzSLAEMQiBykrE7yc1tJ5X2yZzyaJJPRqn36l5h81Nm+3UVmPMqGAJYhAClRX4p5bh8SirZToXHD2xx/gla5eQ68tlcfniJEVojDHDxxLEAGk0SrByDWklPgAKZn6Egixf9/hd7bt4adtLnDfjPPwp/r5mY4wxhwxLEAMU2r6daFsbwdQmtkWL+PQJPXsjf3Ldk0Q0wkWzLkpShMYYM7wsQQxQIKaL7/WpszhxemH3uFA0xBPrnuDEshOZlDOpr1kYY8whxRLEAAUqKsHrpSS7Fv+UY/F49jZOL9u+jF0du7h4ljVOG2NGD0sQAxSorCRQkI/HC/MWntpj3NI1SxmfOZ6PTvxocoIzxpgEsAQxQIGKCpoyhCge8qcf2z18U9Mm3qp5iwtnXYjX401ihMYYM7wsQQxAuK6OyO7dpOe20547A3xZ3eMeX/s4KZ4Uzpt5XhIjNMaY4WcJYgC6GqjLC+rImLqox7iXtr3EKRNPoTC9MN6kxhhzyLIEMQC1K1YBUJjXhKfs6O7hkWiE2vZapuVOS1ZoxhiTMHbDoAHY+tZ7ZGRm4k1TKDume/juwG4iGrFbihpjRiU7gtiPcCSKZ+M6Uop94PVByd5O+GrbagEoyShJVnjGGJMwliD245V3N1PSUk9xSQjGHwHe1O5xNe01AJRkWoIwxow+liD249UXXgcgP2Nnj+olsCMIY8zoZgmiHzVNAZpWrQbAn90KE47uMb62vZY0Txp5vrwkRGeMMYllCaIfjy/fzrTGaiQng9T0aNwjiJLMkh73hDDGmNEioQlCRM4QkbUiskFEbo4zfoqI/F1EVonIMhGZGDPu8yKy3n18PpFxxhONKkuXb+eIQC0Z4zPAlwvjep7OWttea9VLxphRK2EJQkS8wN3AmcA84FIRmder2E+Bh1T1COA24EfutOOAW4HjgEXArSKSn6hY4/nnhnpq61sobtiBP6cNyo4CT8/VVdteaw3UxphRK5FHEIuADaq6SVU7gSXAub3KzANecl+/HDN+MfBXVW1Q1T3AX4EzEhjrPh59exvzQ/VIJILfV7NP+0NUo9S211KaYddAGGNGp0QmiDJge8z7KndYrPeB893X5wHZIlIwwGkRkatEZLmILK+rqxu2wOtagvy1opbzs9sA8OcG9ml/aAg0EI6G7QjCGDNqJbuR+nrgFBF5DzgFqAYiA51YVe9T1YWqurCoqGjYgnry3SrCUeXYUB0efxqpWZF9G6jb7RRXY8zolsgEUQ3E3l5tojusm6ruUNXzVfUo4JvusMaBTJsoqsrSd7azqHwcvi0b8JX6kZzxkDO+R7maNrtIzhgzuiUyQbwDzBSRqSKSBlwCPB1bQEQKRaQrhq8DD7ivXwROF5F8t3H6dHdYwr25qYHN9W1csnACgbVr8We373P0AHaRnDFm9EtYglDVMHANzo69EnhMVVeLyG0ico5b7FRgrYisA0qAH7jTNgDfw0ky7wC3ucMS7tG3t5HjT+ET2Z1oRwf+9DqYcNQ+5Wrba0nxpDDOP24kwjLGmBGX0N5cVfV54Plew74d8/oJ4Ik+pn2AvUcUI2JPWycvfFjDpYsmoevXAeDPD8U/gnCvgfBIsptxjDEmMWzvFuOP71XTGYlyyaLJBCorwOvBlxOOfwTRZhfJGWNGN0sQLlVlydvbOHJSHnPH5xCsrMRX5EOKZ0B63j7l7SpqY8xoZwnC9e62Pazf1cpliyahqgQqKvHntO9zgRw4yaSrHyZjjBmtLEG4Hn17O5lpXj59xATCNTVEGhvxZzXFbX9oDDbSGe20O8kZY0Y1SxBAU0eIZ1ft4JwFZWT6UghUrgHAnx/us4Ea7BRXY8zoZgkCeHplNYFQlEsXOdfmBSorQMA/TqF0/j7l7RoIY8xYMOYThKry6NvbmTc+h/lluQAEKitJy0/FM3EepPr3mcauojbGjAVjPkFsa2hnbW0Lly6a1H3jn2BFJf6cjrgN1OBUMXnFS4G/YCRDNcaYEZXQC+UOBVMKMnn95o+T5XNWRaSxkdCOHeQdGb+LDXASRFFGEV6PdyRDNcaYEdVvghCRZwDta7yqntPXuENJSc7eaqTAGreBOi8EZX0cQdhFcsaYMWB/RxA/dZ/PB0qB37vvLwVqExVUMgUqKgHwF6dC0Zy4ZWrba5mVP2skwzLGmBHXb4JQ1VcARORnqrowZtQzIrI8oZElSaCykpQsDylTj4A4VUiqSm17LSdPPDkJ0RljzMgZaCN1pohM63ojIlOBzMSElFyBitXuHeTiVy81dzbTEe6wW40aY0a9gTZSXwssE5FNgABTgKsSFVSyRDs66Ny8mZy5wb7bH7oukrNTXI0xo9x+E4R7Q59cYCbQVSm/RlWDiQwsGYLr1kFU8eXF7+Ib7CI5Y8zYsd8qJlWNAjeqalBV33cfoy45gNP+AOCfkAl5U+KWqWl3LpKzfpiMMaPdQNsg/iYi14vIJBEZ1/VIaGRJEKioxOMTUmcdBe5Fc73VttXiEQ8F6XaRnDFmdBtoG8TF7vNXYoYpMC1O2UNWYPWH+HMDyMSFfZapba+l0F9Iqid1BCMzxpiRN6AEoapTEx1Ismk4THD9evKn9n2BHGD3gTDGjBkD7mpDRA4H5gHdlx2r6kOJCCoZgps2oZ0h5wrqPvpgAucIYlruqDpwMsaYuAbUBiEitwL/7T4+BvwYGBXdbHQJug3UvsmFkFXUZ7nadjuCMMaMDQNtpP4scBpQo6pfBI7EOfV11AhUVCJe8M3r++ihtbOVtlCbneJqjBkTBpogOtzTXcMikgPsAiYlLqyRF/hwFb7cTmRy/OsfYO9FcnaKqzFmLBhoG8RyEckD7gdWAK3AG4kKaqSpKoE1a8gp7fsCObCL5IwxY8tAz2L6d/flvSLyApCjqqsSF9bIClVXE23rcO5BPX5Bn+Wsmw1jzFgyoAQhIg8DrwL/UNU1iQ1p5AUqKgDwT50Avqw+y3XdarQ4vXhE4jLGmGQaaBvEA8B44L9FZJOIPCki/5nAuEZUsHINiOKb3/cFcuAcQRT4C0j12kVyxpjRb6BVTC+LyKvAsTinuV4NHAbclcDYRkxg1bukZYfxTO0/QdS011j1kjFmzBjodRB/B17D6XJjLXCsqsa/3VrP6c4QkbUiskFEbo4zfrKIvCwi74nIKhE5yx1eLiIdIrLSfdw7uI81OIHKSvz5/TdQg91q1Bgztgy0imkV0AkcDhwBHC4i6f1NICJe4G7gTJwrsC8VkXm9it0CPKaqRwGXAL+OGbdRVRe4j6sHGOeghRsaCDc04y9QKD6s37K17ZYgjDFjx0CrmL4GICLZwBeAB3HuUe3rZ7JFwAZV3eROuwQ4F6iInTWQ477OBXYMIvZh4fH7KftMMf5xQEpan+XaQ+20dLZYFZMxZswYaBXTNSKyFHgPZyf/AM6RQX/KgO0x76vcYbG+A3xORKqA54Gvxoyb6lY9vSIicW8ALSJXichyEVleV1c3kI+yD4/fR072etIOX9Rvue5TXO0IwhgzRgz0Qjk/cCewQlXDw7j8S4HfqurPROQjwMNup4A7gcmqultEjgH+JCKHqWpz7MSqeh9wH8DChQt1SBG07IT0vP23P9hV1MaYMWZARxCq+lMgFbgCQESKRGR/XYBX07M7jonusFj/AjzmLuMNnERU6N69brc7fAWwEZg1kFgHLXci/FcFzL+o32JdV1GXZliCMMaMDYPpzfUm4OvuoFTg9/uZ7B1gpohMFZE0nEbop3uV2YbTCSAiMhcnQdS5CcjrDp+Gcz/sTQOJdcg8/a+KriOI4ky7SM4YMzYMtIrpPOAo4F0AVd3hNlj3SVXDInIN8CLgBR5Q1dUichuwXFWfBq4D7heRr+E0WH9BVVVEPgrcJiIhIApcraoNQ/mAw6WmrYZ8Xz4+b3/t8sYYM3oMNEF0ujtuBRCRzIFMpKrP4zQ+xw77dszrCuDEONM9CTw5wNhGhN0Hwhgz1uy3iklEBHhWRH4D5InIl4G/4fTsOmbYRXLGmLFmv0cQ7pHDhcB/Ac3AbODbqvrXRAd3MKltr+XIoiOTHYYxxoyYgVYxvQs0quoNiQzmYBUIB2gMNloVkzFmTBlogjgOuFxEtgJtXQNV9YiERHWQ2dW+C7CL5IwxY8tAE8TihEZxkLOL5IwxY9FA+2LamuhADmZdNwqyIwhjzFgy0N5cx7Tui+Qy7CI5Y8zYYQliAGraashJyyEjNSPZoRhjzIixBDEAdpGcMWYssgQxAHaRnDFmLLIEMQB2JzljzFhkCWI/OiOdNAQarIrJGDPmWILYj66L5Ow+EMaYscYSxH7YrUaNMWOVJYj96L6TnF1FbYwZYyxB7Ef3EYS1QRhjxhhLEPtR215LVmoWmakDukeSMcaMGpYg9qOmrcbaH4wxY5IliP2obbOrqI0xY5MliP2wi+SMMWOVJYh+hKIh6jvq7QjCGDMmWYLoR317PYraEYQxZkyyBNEPu0jOGDOWWYLoR027cyc5u0jOGDMWWYLoR9dV1NYGYYwZiyxB9KO2vZb0lHSyU7OTHYoxxow4SxD96LpITkSSHYoxxoy4lGQHcDCzW40aMzqEQiGqqqoIBALJDiVp/H4/EydOJDU1dcDTJDRBiMgZwF2AF/gfVb291/jJwO+APLfMzar6vDvu68C/ABHgP1T1xUTGGk9tWy3HjT9upBdrjBlmVVVVZGdnU15ePiZrBFSV3bt3U1VVxdSpUwc8XcKqmETEC9wNnAnMAy4VkXm9it0CPKaqRwGXAL92p53nvj8MOAP4tTu/EROOhp2L5OwUV2MOeYFAgIKCgjGZHABEhIKCgkEfQSWyDWIRsEFVN6lqJ7AEOLdXGQVy3Ne5wA739bnAElUNqupmYIM7vxGzu2M3EY3YKa7GjBJjNTl0GcrnT2SCKAO2x7yvcofF+g7wORGpAp4HvjqIaRGRq0RkuYgsr6urG664AbtIzhhjkn0W06XAb1V1InAW8LCIDDgmVb1PVReq6sKioqJhDcxuFGSMGS6NjY38+te/HvL05eXl1NfXD6jsOeecw+GHHz7kZcVKZIKoBibFvJ/oDov1L8BjAKr6BuAHCgc4bUJ132o0w6qYjDEH5kATxED98Y9/JCsra9jml8izmN4BZorIVJyd+yXAZb3KbANOA34rInNxEkQd8DTwBxG5E5gAzATeTmCs+6htr8Xn9ZHryx3JxRpjEuy7z6ymYkfzsM5z3oQcbj37sD7H33zzzWzcuJEFCxbwyU9+kltvvZVzzz2XPXv2EAqF+P73v8+5555LW1sbF110EVVVVUQiEb71rW9x8cUXd8+no6OD888/n/PPP58vf/nLPZbR2trKnXfeyX333cdFF100LJ8rYQlCVcMicg3wIs4prA+o6moRuQ1YrqpPA9cB94vI13AarL+gqgqsFpHHgAogDHxFVSOJijWe2rZau0jOGDMsbr/9dj788ENWrlwJQDgc5qmnniInJ4f6+nqOP/54zjnnHF544QUmTJjAc889B0BTU1P3PFpbW7nkkku48sorufLKK/dZxre+9S2uu+46MjIyhi3uhF4H4V7T8HyvYd+OeV0BnNjHtD8AfpDI+PpT015j7Q/GjEL9/dMfKarKN77xDV599VU8Hg/V1dXU1tYyf/58rrvuOm666SY+/elPc/LJJ3dPc+6553LjjTdy+eWX7zO/lStXsnHjRn7+85+zZcuWYYsz2Y3UB62uIwhjjBlujzzyCHV1daxYsYKVK1dSUlJCIBBg1qxZvPvuu8yfP59bbrmF2267rXuaE088kRdeeAGnkqWnN954g+XLl1NeXs5JJ53EunXrOPXUUw84TksQcUQ1yq72XZYgjDHDIjs7m5aWlu73TU1NFBcXk5qayssvv8zWrVsB2LFjBxkZGXzuc5/jhhtu4N133+2e5rbbbiM/P5+vfOUr+8z/3/7t39ixYwdbtmzhn//8J7NmzWLZsmUHHLcliDgaAg2ENWxVTMaYYVFQUMCJJ57I4Ycfzg033MDll1/O8uXLmT9/Pg899BBz5swB4IMPPmDRokUsWLCA7373u9xyyy095nPXXXfR0dHBjTfeOCJxW2d9cXTfB8KOIIwxw+QPf/hDj/dvvPHGPmXKy8tZvHjxPsNj2xUefPDBfpdTXl7Ohx9+OLQge7EjiDi67iRnRxDGmLHMEkQcdpGcMcZYgoirtr2WVE8q+f78ZIdijDFJYwkijtr2WoozivEMvFsoY4wZdWwPGEfXrUaNMWYsswQRR22b3WrUGGMsQfSiqtS211oDtTFm2CS6u++WlhYWLFjQ/SgsLOTaa68d8vK6WILoZU9wD6FoyI4gjDHDJtHdfWdnZ7Ny5crux5QpUzj//PMPeL52oVwvdpGcMaPcn2+Gmg+Gd56l8+HM2/scPRLdfXdZt24du3bt6tHR31BZgujFbjVqjBluI9Hdd5clS5Zw8cUXD8utCixB9NJ9BGFVTMaMTv380x8pw93dd6wlS5bw8MMPD0uc1gbRS217LSmSQoG/INmhGGNGqeHu7rvL+++/Tzgc5phjjhmWOC1B9FLbXktRRhFejzfZoRhjRolEd/fd5dFHH+XSSy8dtrgtQfRiNwoyxgy3keru+7HHHhvWBGFtEL3UtNcwZ9ycZIdhjBllRqK7702bNg09wDjsCCKGqtoRhDHGuCxBxGjubCYQCViCMMYYLEH0UNNmNwoyxpguliBi2EVyxhizlyWIGF0JojTTOuozxhhLEDFq22rxiIfC9MJkh2KMMUlnCSJGbXsthemFpHjs7F9jzPBJdHffAKeeeiqzZ8/u7vJ7165dQ15eF0sQMWrb7D4Qxpjhl+juvrs88sgj3V1+FxcXH/D8EvpXWUTOAO4CvMD/qOrtvcb/HPiY+zYDKFbVPHdcBOjqk3ebqp6TyFjBuUhuRt6MRC/GGJNEd7x9B2sa1gzrPOeMm8NNi27qc/xIdvc9nBKWIETEC9wNfBKoAt4RkadVtaKrjKp+Lab8V4GjYmbRoaoLEhVfb6pKTVsNJ044caQWaYwZI0aqu+8vfvGLeL1eLrjgAm655ZYD7vI7kUcQi4ANqroJQESWAOcCFX2UvxS4NYHx9Ks11EpHuMNOcTVmlOvvn/5ISUR334888ghlZWW0tLRwwQUX8PDDD/d734iBSGQbRBmwPeZ9lTtsHyIyBZgKvBQz2C8iy0XkTRH5TMKidNl9IIwxIyUR3X2XlTm71+zsbC677DLefvvtA47zYGmkvgR4QlUjMcOmqOpC4DLgFyIyvfdEInKVm0SW19XVHVAAdpGcMSZREt3ddzgc7j7LKRQK8eyzz3L44YcfcNyJTBDVwKSY9xPdYfFcAjwaO0BVq93nTcAyerZPdJW5T1UXqurCoqKiAwq2O0HYEYQxZpglurvvYDDI4sWLOeKII1iwYAFlZWXD0oidyDaId4CZIjIVJzFcgnM00IOIzAHygTdihuUD7aoaFJFC4ETgxwmMldq2WgShOP3ATw0zxpjeEtndd2ZmJitWrDjwIHtJWIJQ1bCIXAO8iHOa6wOqulpEbgOWq+rTbtFLgCXas2JtLvAbEYniHOXcHnv2UyLUttdSkF5Aqjc1kYsxxphDRkKvg1DV54Hnew37dq/334kz3evA/ETG1ltNe421PxhjTIyDpZE66exGQcYY05MlCFdtW601UBtjTAxLEEBbqI2WUIsdQRhjTAxLENgprsYYE48lCGKuorYjCGNMAoxEd9+dnZ1cddVVzJo1izlz5vDkk08OeXldLEEQcyc56+rbGJMAI9Hd9w9+8AOKi4tZt24dFRUVnHLKKQc8T7szDnuPIIoz7SI5Y0a7mh/+kGDl8Hb37Zs7h9JvfKPP8SPR3fcDDzzAmjXO5/J4PBQWHvidMS1B4BxB5Pvy8Xl9yQ7FGDMKJbq778bGRgC+9a1vsWzZMqZPn86vfvUrSkoOrNrcEgROgijNtOolY8aC/v7pj5Th7u47HA5TVVXFCSecwJ133smdd97J9ddfz8MPP3xAcVobBHaRnDFmZA13d98FBQVkZGRw/vnnA3DhhRf26Al2qCxB4HazYae4GmMSJNHdfYsIZ599NsuWLQPg73//O/PmzTvguMd8FVNHuIOmYJMdQRhjEia2u+8zzzyTm266ibPPPpv58+ezcOHCHt1933DDDXg8HlJTU7nnnnt6zOeuu+7iS1/6EjfeeCM//nHPDq7vuOMOrrjiCq699lqKiori9vo6WNLX3YkONQsXLtTly5cPerrdHbu58dUbuWzuZZw2+bQERGaMSbbKykrmzp2b7DCSLt56EJEV7s3Z9jHmjyAK0gv438X/m+wwjDHmoGNtEMYYY+KyBGGMGRNGS3X6UA3l81uCMMaMen6/n927d4/ZJKGq7N69G7/fP6jpxnwbhDFm9Js4cSJVVVXU1dUlO5Sk8fv9TJw4cVDTWIIwxox6qampTJ06NdlhHHKsiskYY0xcliCMMcbEZQnCGGNMXKPmSmoRqQO2HsAsCoH+b9mUHBbX4Fhcg2NxDc5ojGuKqhbFGzFqEsSBEpHlfV1unkwW1+BYXINjcQ3OWIvLqpiMMcbEZQnCGGNMXJYg9rov2QH0weIaHItrcCyuwRlTcVkbhDHGmLjsCMIYY0xcliCMMcbENaYShIicISJrRWSDiNwcZ7xPRJa6498SkfIRiGmSiLwsIhUislpE/jNOmVNFpElEVrqPbyc6rphlbxGRD9zl7nPLPnH80l1nq0Tk6BGIaXbMulgpIs0icm2vMiOyzkTkARHZJSIfxgwbJyJ/FZH17nN+H9N+3i2zXkQ+PwJx/URE1rjf01MiktfHtP1+5wmI6zsiUh3zXZ3Vx7T9/n4TENfSmJi2iMjKPqZN5PqKu38YsW1MVcfEA/ACG4FpQBrwPjCvV5l/B+51X18CLB2BuMYDR7uvs4F1ceI6FXg2SettC1DYz/izgD8DAhwPvJWE77UG52KfEV9nwEeBo4EPY4b9GLjZfX0zcEec6cYBm9znfPd1foLjOh1IcV/fES+ugXznCYjrO8D1A/ie+/39Dndcvcb/DPh2EtZX3P3DSG1jY+kIYhGwQVU3qWonsAQ4t1eZc4Hfua+fAE4TEUlkUKq6U1XfdV+3AJVAWSKXOczOBR5Sx5tAnoiMH8HlnwZsVNUDuYp+yFT1VaCh1+DY7eh3wGfiTLoY+KuqNqjqHuCvwBmJjEtV/6KqYfftm8Dg+n5OUFwDNJDfb0LicvcBFwGPDtfyBqqf/cOIbGNjKUGUAdtj3lex7464u4z7Q2oCCkYkOsCt0joKeCvO6I+IyPsi8mcROWykYgIU+IuIrBCRq+KMH8h6TaRL6PuHm6x1VqKqO93XNUBJnDLJXm9fwjnyi2d/33kiXONWfT3QR3VJMtfXyUCtqq7vY/yIrK9e+4cR2cbGUoI4qIlIFvAkcK2qNvca/S5OFcqRwH8DfxrB0E5S1aOBM4GviMhHR3DZ/RKRNOAc4PE4o5O5zrqpc6x/UJ1LLiLfBMLAI30UGenv/B5gOrAA2IlTnXMwuZT+jx4Svr762z8kchsbSwmiGpgU836iOyxuGRFJAXKB3YkOTERScb78R1T1j73Hq2qzqra6r58HUkWkMNFxucurdp93AU/hHOrHGsh6TZQzgXdVtbb3iGSuM6C2q5rNfd4Vp0xS1puIfAH4NHC5u2PZxwC+82GlqrWqGlHVKHB/H8tL1vpKAc4HlvZVJtHrq4/9w4hsY2MpQbwDzBSRqe4/z0uAp3uVeRroaun/LPBSXz+i4eLWb/4vUKmqd/ZRprSrLUREFuF8byORuDJFJLvrNU4j54e9ij0NXCmO44GmmEPfROvzn12y1pkrdjv6PPB/ccq8CJwuIvlulcrp7rCEEZEzgBuBc1S1vY8yA/nOhzuu2Dar8/pY3kB+v4nwCWCNqlbFG5no9dXP/mFktrFEtLwfrA+cM27W4ZwN8U132G04PxgAP051xQbgbWDaCMR0Es7h4Spgpfs4C7gauNotcw2wGufMjTeBE0ZofU1zl/m+u/yudRYbmwB3u+v0A2DhCMWWibPDz40ZNuLrDCdB7QRCOHW8/4LTbvV3YD3wN2CcW3Yh8D8x037J3dY2AF8cgbg24NRJd21nXWfsTQCe7+87T3BcD7vbziqcHd/43nG57/f5/SYyLnf4b7u2qZiyI7m++to/jMg2Zl1tGGOMiWssVTEZY4wZBEsQxhhj4rIEYYwxJi5LEMYYY+KyBGGMMSYuSxDGGGPisgRhxiQRyRORf3dfTxCRJ5Id01CJyGdEZF6y4zCjjyUIM1bl4XTvjqruUNXPJjecA/IZnC6gjRlWliDMWHU7MN29ycvjXTeKEZEviMif3JuwbBGRa0Tkv0TkPRF5U0TGueWmi8gLbg+e/xCROX0tSEQuFJEP3Z5lX41Zzv+JyDL3Zi63xpT/nIi87cb2GxHxusNbReQH7nzeFJESETkBp8PCn7jlpydwnZkxxhKEGatuxrmPxALghl7jDsfpoO1Y4AdAu6oeBbwBXOmWuQ/4qqoeA1wP/LqfZX0bWKxOz7LnxAxfBFwAHAFcKCILRWQucDFwohtbBLjcLZ8JvOnO51Xgy6r6Ok73FDeo6gJV3Ti41WBM31KSHYAxB6GX1bk5S4uINAHPuMM/AI5wu14+AXhc9t5PytfP/F4DfisijwGxvfX+VVV3A4jIH3H63QkDxwDvuPNOZ29PnZ3As+7rFcAnh/wJjRkASxDG7CsY8zoa8z6K85vxAI3uP/z9UtWrReQ44FPAChE5pmtU76I4nR/+TlW/HmdWId3beVoE+/2aBLMqJjNWteDc43fQ1Llhy2YRuRCcLplF5Mi+yovIdFV9S1W/DdSxt4/+T4pz8/l0nIbm13B66PysiBS7044TkSmJ+izG9McShBmT3Kqd19zG6Z8MYRaXA/8iIl3dPPd3f+SfiMgH7rJex+kaGpwu5Z/E6cr5SVVdrqoVwC04t7BchXMf4f3d43sJcIPbkG6N1GbYWHffxiSBe2e3hap6TbJjMaYvdgRhjDEmLjuCMGaYiMg3gQt7DX5cVX+QjHiMOVCWIIwxxsRlVUzGGGPisgRhjDEmLksQxhhj4rIEYYwxJq7/D7G4Ahxo0KJSAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "predictor_genre = task.fit(train_data, label='genre',\n",
    "                           time_limits=60 * 2, ngpus_per_trial=1, seed=123,\n",
    "                           output_directory='./ag_sts_mixed_genre')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Genre Accuracy = 83.0%\n"
     ]
    }
   ],
   "source": [
    "score = predictor_genre.evaluate(dev_data, metrics='acc')\n",
    "print('Genre Accuracy = {}%'.format(score['acc'] * 100))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## What's happening inside?\n",
    "\n",
    "Internally, there are different sub-networks that each handle different data types, i.e, a TextNet, a CategoricalNet, and a NumericalNet. These networks individually extract separate features from each type of input. Subsequently, an aggregation network combines these learned features and outputs predictions based on their aggregate information."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}